Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Обмен событиями между видами (https://javascript.ru/forum/extjs/67927-obmen-sobytiyami-mezhdu-vidami.html)

khusamov 15.03.2017 23:21

Обмен событиями между видами
 
Как сделать обмен событиями между двумя независимыми видами?

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

В контроллере второго вида я сделал подписку на глобальное событие:

listen: {
		controller: {
			"*": {
				"preTrialStage.sendApplicationToTrial": "onSendApplicationToTrial"
			}
		}
	},

	onSendApplicationToTrial: function() {
		this.getView().getStore().reload();
	},


А в первом виде (точнее в его контроллере) я генерирую это событие.

Но listen является приватным свойством в Ext.app.ViewController и по идее его использовать нельзя.

Как быть в этом случае?

Infarch 16.03.2017 10:05

На ум приходит идея сделать глобальный стор для пользователей и чейнед сторы для отображения избранных записей в разных вьюшках. Тогда все будет синхронизироваться автоматом. Можете подписаться на события главного стора если надо.

khusamov 16.03.2017 14:12

сторы разные. Объединить не удасться.
Подписка на сторе-домен нельзя, listen как я уже сказал приватный. Надо от него как-то легально избавиться.

kolka 16.03.2017 15:29

А глобально ?
Ext.define('Fiddle.controller.Main', {
    extend : 'Ext.app.Controller',
    
    listen : {
        global : {
            customevent : 'onCustomEvent'
        }
    },
    
    onCustomEvent : function(arg1, arg2) {
        console.log('global event domain', arg1, arg2);
    }
});


Ext.application({
    name : 'Fiddle',
    
    controllers : [
        'Main'
    ],

    launch : function() {
        new Ext.button.Button({
            renderTo : Ext.getBody(),
            text     : 'Fire customevent',
            handler  : function() {
                Ext.GlobalEvents.fireEvent('customevent', 'foo', 'bar');
            }
        });
        
        Ext.GlobalEvents.on('customevent', function(arg1, arg2) {
            console.log('on', arg1, arg2);
        });
    }
});

khusamov 26.03.2017 23:09

Интересный класс Ext.GlobalEvents
Ну он по идее тут спасет положение, чтобы не пользоваться listen, которого нет в документации


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