0

質問のタイトルで質問を説明する方法がわかりませんでした。しかし、ここに私の問題があります:

(a) Ext.grid.Panel の行をダブルクリックすると、モーダル ウィンドウが開き、関連する詳細が表示され、レコードが更新されます。

(b) 必要な変更を行ってモーダル ウィンドウを閉じた後、selectedSalesOrderNum などの特定のコードでフィルター処理されたグリッドでグリッドに戻りたいと考えています。

jobSlotsGrid.on('celldblclick', function(tableview, td, cellIndex, record, tr, rowIndex, e, eOpts){
    modalStatus = loadWindow();
    jobSlotStore.filterBy(function(rec) {
        alert('Filtering data');
        return  rec.get('salesOrderNum') === selectedSalesOrderNum;
    });
});

(c) 以下は、モデル ウィンドウを作成する関数です。また、メソッド submitCreateJobSlotHandler() への呼び出しもあり、基本的に変更を保存し、元のグリッドにすべてのデータをリロードします。(したがって、特定のコード、つまり selectedSalesOrderNum でフィルタリングする必要があります)。

function loadWindow()
{
        getAllTabsForEditJobSlot();   
        var createJobSlotWin = new Ext.Window({
        id:'salesOrder-win-jobSlot',
        applyTo     : 'hello-win',
        modal       : true,
        layout      : 'fit',
        width       : 900,
        height      : 500,
        closeAction :'destroy',
        plain       : true,
        model       : true,
        stateful    : false,
        title       :'Create Job Slot',
        items       : [editJobSlotInformationPanel],
        buttons     : [{
        text        : 'Save',
        handler     : function(){
            submitCreateJobSlotHandler();           
            //createJobSlotWin.destroy();
        }        
        },{
        text     : 'Close',
        handler  : function(){
        createJobSlotWin.destroy();
        }
        }] 
    });
        createJobSlotWin.show();    
}

問題:

コードの最初のブロックでは、loadWindow メソッドが呼び出されるとすぐに、両方のモーダル ウィンドウがポップアップし、filterBy コードが並行して実行され、アラートが表示されます (「データのフィルタリング」)。次に、モーダルにデータを入力して保存します。というわけで、基本的にモーダルで保存/閉じる後はフィルタリングは行いません。コード ( if/else ) は、モーダル ウィンドウを読み込んだ直後に到達します。あたかもモーダル ウィンドウが開いて次のコード行に移動するかのように、後でモーダル ウィンドウでユーザーが何らかのアクションを実行するのを待ちます。

私の質問が明確であることを願っています。どうすればこれを処理できますか?

編集:

今考えれば考えるほど、新しい Ext.Window() 呼び出しがあり、モーダル内の他のユーザー アクションを気にせずにコントロールを返すため、loadWindow() メソッドはモーダル ウィンドウを作成するだけだと思います。したがって、後続の filterBy イベントをすぐに実行します。その場合、[モーダル ウィンドウで保存] でストアをリロードした後に、ストアをフィルター処理したいと考えています。モーダル ウィンドウの保存には、次のハンドラ コードがあります。

function submitCreateJobSlotHandler () {
    alert('Into Submit');
    var formPanel = Ext.getCmp('salesOrderJobSlotForm');
    formPanel.getForm().submit({
        url : 'someUrl',
        method : 'POST',
        success : function() {
            alert('Success');
            jobSlotStore.load({
                scope : this,
                url : 'salesOrderJobSlot/listJSON'
            });
            jobSlotStore.filterBy(function(rec) {
                alert(rec.get('salesOrderNum')+"--"+selectedSalesOrderNum)
                return  rec.get('salesOrderNum') === selectedSalesOrderNum;
            });
        },
        failure : function() {
            alert('PSO save failed!');
        }

    });
}

しかし、ここでの問題は、jobSlotStore.load() が呼び出されても、filterBy が実行されるまで保持されることです。なぜなら、アラートが 1 つずつ発生し、すべてのアラートが完了すると、ストアが読み込まれるからです。そのため、filterBy は「遅い」ストア ロードによってオーバーライドされます。

いずれかの方法で問題に対処するための提案はありますか?

4

1 に答える 1

2

ストアの読み込みは非同期です。クライアントでデータ セットをフィルター処理するには、完了するまで待つ必要があります。

store.on('load', function() {
    store.filter();
}, null, {single: true});
store.load();
于 2013-07-23T08:02:37.517 に答える