2013-07-23 3 views
0

Я не был уверен, как описать свой вопрос в заголовке вопроса. Но вот моя проблема: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 получает избыточную нагрузку на «позднюю» загрузку.

Любые предложения по решению проблемы любым из способов?

ответ

2

Нагрузку магазин асинхронно, вам нужно ждать до его завершения, прежде чем вы можете фильтровать данные, установленные на клиенте:

store.on('load', function() { 
    store.filter(); 
}, null, {single: true}); 
store.load(); 
+0

Спасибо Эван. Я понял, что это асинхронный вызов и использовал свойство callback для получения результата загрузки, а затем фильтрацию сетки. Он тоже работал. – rajugaadu

Смежные вопросы