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;
            }
        }
    }
}

子カスタム コンポーネントを含む 1 つの大きなカスタム コンポーネント (「Mr. Big」と呼びます) もあります。そして、これらのチャイルドは、お互いにカスタム イベントを発生させます。私のアプリケーションで、「Mr.」のインスタンスを複数持つことができるという問題。Big' とそれぞれの 'Mr.Big' が動的に作成されます。チャイルドも動的に作成されます。

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);
...
}
}

たとえば、「Mr.」のインスタンスが 2 つあります。大きい'。'Mr.の子 1 の customEvent1 が必要な場合は、Big 1 は、'Mr. ビッグ 2 フィート。

私の解決策の1つは、Mr.Bigsとその子コンポーネントに一意のIDを使用し、操作を実行する前にハンドラーで次のように書くことです:

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

BUT: 3 つ以上の「Mr. Bigs' で、それぞれに 9 つの子があり、カスタム イベントが何度も発生するため、アプリの速度に問題があると思います。

お願い助けて!

4

0 に答える 0