Как отключить Ext.data.ChainedStore в видах, если само хранилище в контроллере?
Если в контроллере прописать хранилище:
stores: ["MyStore"] а в виде grid прописать это хранилище таким образом: store: "MyStore" То в гриде появятся записи из этого хранилища. Далее если прописать в грид пэйджер { xtype: "pagingtoolbar", store: "MyStore" } то появится ошибка: Uncaught TypeError: store.getTotalCount is not a function То есть пэйджер не смог в store найти этот метод. После долгого ковыряние исходников выяснил, что оказывается, если хранилище прописать в контроллере и потом на него ссылаться из вида, то там, на местах будет создаваться не ссылка на хранилище, а экземпляр класса Ext.data.ChainedStore, у которого нет метода getTotalCount() (да и многих других методов нет). Вопрос, как заставить туда прописывать ссылку на хранилище, а не создавать экземпляр Ext.data.ChainedStore? |
Подтаскивание Store через контроллер это такая недофича времён 4.0. Я сам её никогда не использую, именно потому что она приводит к невнятным результатам; к сожалению, и выкорчевать тоже нельзя, потому как документировано и должно работать. :(
Используйте вместо этого алиасы: Store: Код:
Ext.define('MyApp.store.Foo', { Код:
Ext.define('MyApp.view.FooGrid', { |
интересно, в этом случае точно хранилище будет в ОДНОМ экземпляре, а на местал лишь ссылки на него???
|
Будет-будет. Потрассируйте код, если мне не верите. ;)
|
я не неверю))) просто на первый взгляд ваше предложение похоже на то, что будет много инстантов.
Спасибо, буду пробовать. |
Я правильно понял, что следующие записи полностью идентичны?
alias: 'store.foo' и storeId: 'foo' |
То есть, если мне вдруг понадобиться хранилище то я его добывать должен так?
var fooStore = Ext.data.StoreManager.lookup({ type: "foo" }); Что-то в документации об этом почти ничего не сказано: http://docs.sencha.com/extjs/5.1/5.1...-method-lookup И ощущение, будто будет создано новое хранилище... |
Цитата:
alias: 'store.foo' и StoreManager.lookup({ type: 'foo' }) приведёт к тому, что для каждого вызова будет создаваться свой экземпляр хранилища с типом foo. |
Цитата:
|
Итак, если мне нужен ОДИН экземпляр то я должен использовать storeId и StoreManager.lookup(storeId)
Если несколько - то alias: 'store.foo' и StoreManager.lookup({ type: 'foo' }) Верно? Если верно, то: Вопрос из первого поста остается открытым, что мне делать, если мне нужен один экземпляр? То есть в гриде я хочу прописать: store: "MyStore" и в пэйджере: { xtype: "pagingtoolbar", store: "MyStore" } но при этом я хочу, чтобы и там и сям были ссылки на ОДНО хранилище, и чтобы не создавались экземпляры класса Ext.data.ChainedStore. Причем и там и сям конфиги в пределах метода define, где неуместно делать вызов StoreManager.lookup(storeId) так как на момент определения класса хранилище может быть не определено. |
Часовой пояс GMT +3, время: 15:46. |