2

ビューポートから Ext west パネルがあり、最初に west からすべての要素を削除し、次に別の要素を広告してから doLayout() を実行するハンドラーをボタンに持っています。したがって、この関数がボタンのクリックで行うことは 3 つあります。ボタンがクリックされたときに西側パネルにマスクを追加し、3 つのタスクがすべて完了したらマスクを解除したいと考えています。

パネルは次のとおりです。

{
                region: 'west',
                id: 'west-panel',
                title: 'West',
                split: true,
                width: 200,
                minSize: 175,
                maxSize: 400,
                collapsible: true,
                margins: '0 0 0 5',
                layout: 'fit'
                items: [leftMenu]
            }

そして、これが私がタスクを行う方法です:

west.removeAll();
west.add(indexHeaderPanel);
west.doLayout();

これは可能ですか?質問があれば、さらに情報を提供します。ありがとうございました。

4

1 に答える 1

13

文字通り、コード ブロックの前後で mask() を実行してから unmask() を実行するだけです。コード内の何かが非同期で実行される場合は、マスク解除が適切なコールバックで行われることを確認してください。例として:

    buttons: [{
        text: 'Refresh West Panel',
        handler: function(){
            var w = Ext.getCmp('west-panel');
            w.getEl().mask();
            w.removeAll();
            w.add(indexHeaderPanel); // assuming you have this ref!
            w.doLayout();
            w.getEl().unmask();
        }
    }]

ロジックが十分に速く実行される場合、マスキングは表示されません。それが機能することを確認するには、テスト遅延を入れることができます:

    buttons: [{
        text: 'Foo',
        handler: function(){
            var w = Ext.getCmp('west-panel');
            w.getEl().mask();

            // do whatever

            (function(){
                w.getEl().unmask();
            }).defer(1000, this);
        }
    }]

w.getEl().[un]mask() は、パネル全体 (ヘッダー/フッターを含む) をマスクします。コンテンツのみをマスクするには、w を実行します。body .[un]mask()。

于 2009-09-18T04:35:46.633 に答える