Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.09.2016, 09:52
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 12.05.2016
Сообщений: 95

Кнопка refresh не работает в pagingtoolbar без ViewModel
Всем привет!

Обнаружил сегодня такую интересную багу(?) при выводе таблицы. Если я не указываю ViewModel и просто прописываю store вот так для грида и pagingtoolbar:
store: {
    type: 'employees'
}

То данные в таблицу отлично загружаются, но кнопка refresh в тулбаре не обновляет ничего.

Но если создать ViewModel вот такой:
Ext.define('MyApp.view.employees.EmployeesModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.employees',

    requires: [
        'Ext.data.Store',
        'Ext.data.proxy.Memory',
        'Ext.data.field.Integer',
        'Ext.data.field.String',
        'Ext.data.field.Date',
        'Ext.data.field.Boolean',
        'Ext.data.reader.Json'
    ],

    stores: {
        usersResults: {
            type: 'employees'
        },
    }
});


А потом прописать его во вьюхе:
viewModel: {
        type: 'employees'
},


И прописать store через bind в гриде и тулбаре:
bind: '{usersResults}'


То кнопка refresh отлично работает!

С чем связано подобное поведение?
Ответить с цитированием
  #2 (permalink)  
Старый 30.09.2016, 11:51
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

так в документации, например, в версии 5.1.3

для грида http://docs.sencha.com/extjs/5.1.3/a...html#cfg-store
параметр store может содержать Store config object, например { type: 'employees' }

а смотрим на pagingtoolbar
http://docs.sencha.com/extjs/5.1.3/a...html#cfg-store
параметр store только либо Ext.data.Store class / subclass либо String - ID of a store

так что, похоже, ваше поведение pagingtoolbar согласно документации :-)
Ответить с цитированием
  #3 (permalink)  
Старый 30.09.2016, 21:32
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

Это потому, что конфиг с типом хранилища приводит к созданию отдельного экземпляра, и получается, что у grid одно хранилище, а у Paging toolbar другое. Как два гуся из песенки. :)
Ответить с цитированием
  #4 (permalink)  
Старый 03.10.2016, 01:39
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 12.05.2016
Сообщений: 95

Сообщение от nohuhu Посмотреть сообщение
Это потому, что конфиг с типом хранилища приводит к созданию отдельного экземпляра, и получается, что у grid одно хранилище, а у Paging toolbar другое. Как два гуся из песенки.
Вон оно как... а я такой еще смотрю количество показывает, а кнопка не работает.

Так каким образом прописывать store здесь? Через storeID?
ViewModel мне тут в принципе не особо нужна...
Ответить с цитированием
  #5 (permalink)  
Старый 03.10.2016, 11:35
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

например в initComponent
создай укажи store для Paging toolbar, как здесь делают http://examples.sencha.com/extjs/5.1...k/#paging-grid
Ответить с цитированием
  #6 (permalink)  
Старый 06.10.2016, 10:09
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 12.05.2016
Сообщений: 95

Удаляю строку в гриде через actioncolumn вот так:
{
    xtype: 'button',
    iconCls: 'x-fa fa-close',
    handler: function(grid, rowIndex, colIndex) {
        //get store
        var store = grid.getStore();
        //get current record by row index
        var rec = store.getAt(rowIndex);
        //delete (autosync do all job)
        store.remove(rec);
    }
}


Но итоговое количество в pagingtoolbar остается прежним. Какое-то событие надо вызывать его обновления?
Ответить с цитированием
  #7 (permalink)  
Старый 06.10.2016, 13:22
Аватар для kolka
Кандидат Javascript-наук
Отправить личное сообщение для kolka Посмотреть профиль Найти все сообщения от kolka
 
Регистрация: 07.06.2010
Сообщений: 146

store.sync()
store.reload()

Последний раз редактировалось kolka, 06.10.2016 в 13:25.
Ответить с цитированием
  #8 (permalink)  
Старый 06.10.2016, 13:24
Аватар для kolka
Кандидат Javascript-наук
Отправить личное сообщение для kolka Посмотреть профиль Найти все сообщения от kolka
 
Регистрация: 07.06.2010
Сообщений: 146

Или в свойствах store укажи
autoSync : true
Ответить с цитированием
  #9 (permalink)  
Старый 06.10.2016, 13:52
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от kolka
store.reload()
зачем хранилище перезагружать?
достаточно просто
обновить информацию на pagingtoolbar
pagingToolbar.onLoad();

для надежности иногда можно
gridStore.totalCount = gridStore.count();
pagingToolbar.onLoad();
Ответить с цитированием
  #10 (permalink)  
Старый 07.10.2016, 07:30
Аватар для Sogl
Аспирант
Отправить личное сообщение для Sogl Посмотреть профиль Найти все сообщения от Sogl
 
Регистрация: 12.05.2016
Сообщений: 95

Сообщение от kolka Посмотреть сообщение
Или в свойствах store укажи
autoSync : true
Уже указано, в том то все и дело.

Сообщение от Pavel M. Посмотреть сообщение
зачем хранилище перезагружать?
достаточно просто
обновить информацию на pagingtoolbar
pagingToolbar.onLoad();

для надежности иногда можно
gridStore.totalCount = gridStore.count();
pagingToolbar.onLoad();
Не помогает этот код... я использую еще и пагинацию, поэтому у меня получается, что:
  1. У меня показано 1-25 из 35 элементов
  2. Удаляю. При этом из БД элемент удаляется (становится 34) и store.count() в консоли показывает 35, а store.totalCount уже 24
  3. Срабатывает onLoad() и тулбар показывает "1-24 из 24", что в корне неверно, т к у меня 34 на самом деле уже.

Простой onLoad() ничего не делает.
Интересно, почему такой простой момент автоматом не выполняется?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает без обновления страницы levi4 jQuery 4 26.01.2011 15:12
Не работает без обновления страницы levi4 Events/DOM/Window 3 25.01.2011 15:44
Не работает кнопка отправки после загрузки Igor Shmigoff jQuery 2 29.12.2010 21:51
Подскажите карусель, которая работает без какого либо фреймворка Khmelevsky Библиотеки/Тулкиты/Фреймворки 2 25.04.2010 12:45
Не работает кнопка "Назад" savagden Javascript под браузер 3 10.12.2009 20:25