Я пытаюсь сохранить состояние сетки с помощью Ext.state.CookieProvider. Проблема в том, что я не могу восстановить параметры сортировщиков, пока само состояние (ширина, порядок) восстанавливается должным образом.Государственный провайдер не восстанавливает сортировщики правильно
Сначала я создал cookieprovider в Init() метод видового экрана ViewController:
Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider', {}));
Мой магазин установлен режим нагрузки с дистанционной сортировкой:
Ext.define('MyApp.requests.store.QueryRequestsGridStore', {
extend: 'Ext.data.Store',
model: 'MyApp.requests.model.QueryRequestsGridModel',
alias: 'store.queryRequestsGrid',
remoteSort: true,
autoLoad: true,
proxy: {
startParam: 'offset',
limitParam: 'limit',
url: '/requests',
noCache: false,
type: 'ajax',
reader: {
type: 'json',
rootProperty: 'data',
totalProperty: 'total'
}
},
});
Магазин определяется в сетке используя привязку вида просмотра:
bind: {
store: '{queryRequestsGrid}'
},
Я загружаю сетку, содержащую магазин из viewp орт ViewController на кнопку мыши, как это:
var panelToAddName = Ext.create('MyApp.requests.view.QueryRequestsGridView', {});
var mainViewPort = Ext.ComponentQuery.query('#mainViewPort')[0];
var regionPanel = mainViewPort.down('[region=center][xtype=panel]');
regionPanel.removeAll();
regionPanel.add(panel);
Cookie содержит сортировщики, но сетка загружается без каких-либо параметров сортировки.
"storeState":{"sorters":[{"root":"data","property":"date_completed","direction":"ASC"}]}}}
Я вырыл в исходный файл внутр-все-debug.js и нашел initState() метод класса А «Ext.state.Stateful».
initState: function() {
var me = this,
id = me.stateful && me.getStateId(),
hasListeners = me.hasListeners,
state, combinedState, i, len, plugins, plugin, pluginType;
if (id) {
combinedState = Ext.state.Manager.get(id);
if (combinedState) {
state = Ext.apply({}, combinedState);
if (!hasListeners.beforestaterestore || me.fireEvent('beforestaterestore', me, combinedState) !== false) {
plugins = me.getPlugins() || [];
for (i = 0 , len = plugins.length; i < len; i++) {
plugin = plugins[i];
if (plugin) {
pluginType = plugin.ptype;
if (plugin.applyState) {
plugin.applyState(state[pluginType], combinedState);
}
delete state[pluginType];
}
}
me.applyState(state);
if (hasListeners.staterestore) {
me.fireEvent('staterestore', me, combinedState);
}
}
}
}
},
Если войти me.store изнутри этого метода, магазин показан на консоли, как доба-пустому-магазин в то время как меня мои нагруженные сеток. Кажется, что состояние применяется до того, как хранилище правильно загружено.
Если повторное использование метода initState внутри события сетки beforerender, сортировщики восстанавливаются из файла cookie.
Любые предложения?
Я бы предложил сделать действительно простую скрипку sencha (сетка с одной колонкой, загрузка магазина с одним полем и т. Д.), Который показывает проблема. И затем вы публикуете его как ошибку на форуме sencha. – Alexander
Одна вещь, которую я только что отметил: вы можете опубликовать свой код, где/как вы добавили хранилище в сетку, и где/как вы добавили состояние в сетку. Существует несколько способов добавления хранилища ('store: 'MyStoreId'' и' store: Ext.create (' MyApp.store.MyStore ') ', которые могут демонстрировать разные типы поведения. – Alexander
@Alexander, я добавил код вы предложили, не поможет ли это? Если нет, я сделаю скрипку sencha. – fen1ksss