質問のタイトルで質問を説明する方法がわかりませんでした。しかし、ここに私の問題があります:
(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 は「遅い」ストア ロードによってオーバーライドされます。
いずれかの方法で問題に対処するための提案はありますか?