1

我有个问题。我在我的应用程序中使用可观察模式来管理自定义事件:

var app = {};
app.Event =
{
    _observers:[], 
    subscribe:function (event, obj) {
        var c = obj || null;
        if (c) {
            this._observers.push({event:event, obj:obj, id:obj.id }); 
        }
    },

    fire:function (event, data) {
        var item;
        for (var i in this._observers) { 
            if (this._observers[i].event == event)
            {
                item = this._observers[i];
                item.obj.fireEvent(event, item.obj, data); 
            }
        }
    },


    unsubscribe:function (event, obj) {
        for (var i in this._observers) { 
            if (this._observers[i].id == obj.id) 
            {
                this._observers.splice(this._observers[i], 1)
                break;
            }
        }
    }
}

我还有一个包含子自定义组件的大型自定义组件(称之为“Mr. Big”)。并且这些孩子会互相触发自定义事件。问题是在我的应用程序中,我可以拥有多个“先生”实例。Big' 和每个 'Mr.Big' 将被动态创建。Childs 也是动态创建的。

Ext.define('Mr. Big',{
 extend:'ME.view.portal.portalItems.base.Panel',
...
items: ['child 1','child 2']
}); 

Ext.define('child 1',{
...
 listeners:{
customEvent1: function(ev, data)
{
...
}
initComponent: function()
{
...
app.Event.subscribe('customEvent1',this);
...
}
}

Ext.define('child 2',{
...
 listeners:{
customEvent2: function(ev, data)
{
   app.Event.fire('customEvent1',anyData)
}
initComponent: function()
{
...
app.Event.subscribe('customEvent2',this);
...
}
}

例如,我有 2 个“先生”实例。大的'。如果我想要“先生”的孩子 1 的 customEvent1,我需要做什么。Big 1 不会被“Mr.”的孩子 2 解雇。大 2'。

我的解决方案之一是:在执行任何操作之前使用 Mr.Bigs 及其子组件和处理程序的唯一 ID 写入:

 if (this.UID != data.UID)
 {
     return;
 }

但是:如果我有 3 个或更多“先生”。Bigs 和他们每个人都有 9 个孩子,我的自定义事件将被触发很多次,以至于我认为我的应用程序速度存在问题。

请帮帮我!

4

0 回答 0