我不确定如何在问题标题中描述我的问题。但这是我的问题:
(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(),它基本上保存了更改并使用所有数据重新加载原始Grid。 (因此必须使用某个代码将其过滤回来,即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)。好像,模态窗口打开并转到下一行代码,等待用户稍后在模态窗口上执行某些操作。
希望我对我的问题很清楚。有人可以建议我如何处理这个问题?
修改
我现在想的越多,我想loadWindow()方法只是创建模态窗口,因为我们刚刚有一个新的Ext.Window()调用,并且不会打扰模态中的其他用户操作并返回控制。因此,立即执行后续的filterBy事件。在这种情况下,我想在Save in Modal Window中重新加载商店后过滤商店。 Modal窗口上的保存具有以下处理程序代码:
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被执行为止。因为,我看到警报一个接一个地出现,然后在所有警报完成后,商店加载。因此,filterBy会被'迟'的商店负载覆盖。
有任何建议以任何方式处理该问题吗?
答案 0 :(得分:2)
存储加载是异步的,您需要等到它完成才能过滤客户端上的数据集:
store.on('load', function() {
store.filter();
}, null, {single: true});
store.load();