Я не был уверен, как описать свой вопрос в заголовке вопроса. Но вот моя проблема:ExtJS 4.1: Модальное окно, кажется, возвращает управление перед отправкой окна
(a) Когда я дважды нажимаю на строку в Ext.grid.Panel, я открываю модальное окно с его реляционными подробностями для обновления записи.
(b) После того, как я сделаю необходимые изменения и закрою модальное окно, я хочу вернуться к Grid с сеткой, отфильтрованной по определенному коду i.e 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(), который в основном сохраняет изменения и перезагружает исходную сетку всеми данными. (Следовательно, необходимо отфильтровать его с помощью определенного кода, выбранного мнойSalesOrderNum).
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 получение выполняется параллельно и показывая вверх по предупреждения («Фильтрация данных»). Затем я ввожу данные в модальные и сохраняю. Итак, в основном, фильтрация не выполняется после сохранения/закрытия по модальному. Код (если/else) сразу достигается после загрузки модального окна. Это похоже на то, что модальное окно открывается и переходит к следующей строке кода, ожидая, что пользователь выполнит некоторое действие в модальном окне позже.
Надеюсь, что я полностью понял свой вопрос. Может ли кто-нибудь угодить советам, как я могу справиться с этим?
EDIT:
Чем больше я думаю об этом сейчас, я думаю, метод loadWindow() просто создает модальное окно, как мы просто вызов новым Ext.Window() и не беспокоиться о другие действия пользователя внутри модального и возвращает элемент управления. И, следовательно, немедленно выполняет последующее событие 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 не запускается на выполнение. Потому что, я вижу, что предупреждения появляются один за другим, а затем после того, как все предупреждения сделаны, магазин загружается. Таким образом, filterBy получает избыточную нагрузку на «позднюю» загрузку.
Любые предложения по решению проблемы любым из способов?
Спасибо Эван. Я понял, что это асинхронный вызов и использовал свойство callback для получения результата загрузки, а затем фильтрацию сетки. Он тоже работал. – rajugaadu