Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Листенер для store.load (https://javascript.ru/forum/extjs/59443-listener-dlya-store-load.html)

Infarch 11.11.2015 14:24

Листенер для store.load
 
Здравствуйте.

У меня тут возник вопрос по добавлению листенера к стору. Имеется конструкция типа "Кощеева смерть": окно, в нем кардлаяут, в карте панель, в панели грид, у грида стор. Я хочу прицепить к стору хендлер на load. Сама функция расположена в контроллере окна.
store: {
	type: 'emailsearchuser',
	listeners: {
		load: 'loaded'
	}
},

На этом я получаю ошибку: [E] Ext.util.Event.getFireInfo(): No method named "loaded" on SafetyRound.store.EmailSearchUser.
Попробовал указать листенерам скоп:
store: {
	type: 'emailsearchuser',
	listeners: {
		load: 'loaded',
		scope: 'controller' // <---------
	}
},

Опять таки ошибка: Ext.mixin.Observable.resolveListenerScope(): scope: "controller" can only be specified on classes that derive from Ext.Component or Ext.Widget.
И как же мне использовать метод из контроллера?

siber-biber 11.11.2015 15:33

вешайте лиснер недекларативным способом как вариант..
store.on('load', controller.loaded, controller);

Infarch 11.11.2015 16:00

Так то он вешается. А хотелось через конфиг.

XAPuTOH 12.11.2015 10:13

Можно попробовать подвесить обработчик из контроллера.
Например в сторе указать референс. а при инициализации контроллера:
this.lookupReference('store').on('load', this.onStoreLoad, this);

Infarch 12.11.2015 11:08

XAPuTOH, разве это отличается от варианта предложенного siber-biber? Я так и делаю, просто мне странно что такая крутая система программирования через конфиги как у экста дала сбой на подобной ерунде.

siber-biber 12.11.2015 12:10

Все эти авто распознавания scope насколько я понимаю работают для дерева компонентов и на этом поставили точку. А у вас стор.
Тут ситуация сложнее ..стор может быть расшарен между компонентами, я думаю могут быть некоторые сложности с резолвом.. Не хотели усложнять видимо настолько.

Infarch 12.11.2015 18:18

Видимо, да. Ну ладно, пусть это будет наибольшей проблемой Экста )

nohuhu 21.11.2015 05:16

@Infarch,

Автораспознавание scope действительно работает только для компонентов, и причин тому несколько (в т.ч. указаная siber-biber).

Декларативную конфигурацию можно использовать с контроллерами, через специальный домен событий store: http://docs.sencha.com/extjs/6.0/6.0...ler-cfg-listen. Причём этот вариант будет работать не только с глобальными контроллерами, но и с ViewController тоже. :)

Простор для фантазии...


Часовой пояс GMT +3, время: 02:35.