0

次のような、再利用可能なExtJSコンポーネントをいくつか作成しました。

MyCustomGridPanel = Ext.extend(Ext.form.GridPanel, {
    constructor: function(config) {
        config = Ext.apply({
            // some other default options
        }, config);

        MyCustomFormPanel.superclass.constructor.call(this, config);
    }
});

その後、このカスタムグリッドパネルを必要なページに含めることができます。場合によっては、同じグリッドパネルを1ページに複数回表示します。

私が解決しようとしている問題は、フォームパネルに関連するデータを含むグリッドパネルを自動的に更新したいフォームパネルがあることです。

ページ上の単一のグリッドパネルの場合、フォームパネルの送信が成功すると、を呼び出すことができますExt.getCmp('the_id_of_the_grid_panel').getStore().reload()。しかし、これらのグリッドパネルの複数のインスタンスを使用して、IDは一意である必要があるため、IDを使用せずに同様のことを実行したいと思います。ある種の識別子を持つページ上のすべてのグリッドパネルの配列を取得して、を呼び出したいと思います<item>.getStore().reload()

私のグーグル検索とスタックオーバーフロー検索機能は私に失敗しました、そして私は私が探しているものを私に得るために何も見つけることができないようです。

4

4 に答える 4

1

おそらく、グリッドの配列を持つようにパネルを拡張します。フォームの送信が成功したら、ストアの配列を「それぞれ」呼び出してリロードします。グリッドIDを保存する(そしてルックアップを実行する)か、ストア自体への参照を実行するかを決定できます。

もちろん、どのグリッドがフォームパネルに関連付けられているかを事前に知っておく必要があります。つまり、最初にどのグリッドがどのパネルに属しているかを追跡する方法が必要です。おそらく、グリッドのアフターレンダリングでこのグリッドの配列を作成できます。

最終的には、これらすべてのcmpへの参照を保存する方法を考案する必要があります。私はあなたのためにこれを行うlibには何もないと思います。最も基本的なレベルでは、各cmpのアフターレンダリングで参照が入力されるある種の配列は、少なくとも、ループするものを提供します。

于 2012-11-19T06:54:48.210 に答える
1

これを行うには2つの方法があります。

1)これらのオブジェクトの独自のコレクションをある種のグローバル配列で維持し、initComponent中にインスタンスをプッシュします。

MyApp.myGrids.push(this);

2)〜all〜コンポーネントを繰り返し処理してから、必要なコンポーネントを抽出します。

Ext.ComponentMgr.all.each(function(c){
    // xtype or some other check, instanceof
    if (c.isXType('mytype')) {
    }
});
于 2012-11-19T07:35:53.130 に答える
1

私たちのプロジェクトでも同様のことをしなければなりません。相互に通信するためのグリッドが必要です。データが1つで更新されると、それ自体を更新するために別のグリッドが必要になる場合があります。これは、extjsアプリケーション内でメディエーターパターンを使用して行います。編集中のグリッドを特定のイベント(この場合は編集イベント)の送信者として登録します。次に、新しい行が追加されると、メディエーターはメッセージを送信し、そのイベント(編集イベント)をリッスンしている他のグリッドはメッセージ/イベントを受信して​​更新します。

とにかくメディエーターを作成できます。これが出発点です:

http://www.fancybread.com/blog/post.cfm/mediator-pattern-applied-to-javascript

于 2012-11-28T12:51:41.833 に答える
0

ExtJSv3でこれを試すことができます。

var gridPanels = [];
gridPanels.push(new MyCustomGridPanel(opts));    

...

Ext.each(gridPanels, function (gp) {
    gp.getStore().reload();
});

各グリッドパネルに名前を割り当てる場合は、refプロパティを使用するか、名前付きオブジェクトに割り当てて反復処理することができます。

MyMainPanel = Ext.extend(Ext.Panel, {
    gpNames: ['FirstName', 'Gender'],
    constructor: function(config) {
        config = Ext.apply({
            items: [{
                //make sure you create an xtype for your class
                xtype: 'MyCustomGridPanel',
                ref: 'gp'+gpNames[0]
            }, {
                xtype: 'MyCustomGridPanel',
                ref: 'gp'+gpNames[1]
            }]
        }, config);

        MyMainPanel.superclass.constructor.call(this, config);

        Ext.each(gpNames, function (gpName) {
            this['gp' + gpName].getStore().reload();
        }, this);
    }
});

これはかなり大雑把な方法ですが、アイデア全体を説明するのに役立つことを願っています。

于 2012-11-20T06:48:34.323 に答える