我在ExtJS 4中有一個組合框,它有兩個監聽器分配給它。一個是在後期,選擇一個默認值。 (組合框列出了幾個月,默認網格有當前月份的數據,我希望組合框在本月顯示。)另一個是select,它會根據所選月份獲取報表。由於報告是預加載的,因此我不希望它在組合框的預填充時激活,僅在組合框的後續使用(即人爲交互)時激活。ExtJS 4預填充字段時跳過事件
這是怎樣我都聽衆設置:
init: function init() {
this.control({
'[xtype=monthcombo]': {
afterrender: this.onMonthComboAfterRenderDo,
select: this.onMonthComboSelectDo
}
})
}
這是prepop一個AfterRender功能:
onMonthComboAfterRenderDo: function(monthcombobox) {
monthcombobox.suspendEvents(false); // Don't fire the select event
var date = new Date(),
thisMonth = Ext.Date.add(date, Ext.Date.MONTH,0);
thisMonth = Ext.Date.format(thisMonth,'Ym');
monthcombobox.calculateMonths(23,0);
monthcombobox.setValue(thisMonth);
monthcombobox.resumeEvents();
}
哦,我也嘗試抑制事件的觸發,你可以看到,但這些電話似乎並沒有做任何事情。最後,這是在選擇一個項目時調用的函數。
onMonthComboSelectDo: function(monthcombobox) {
console.debug('Month selected');
var monthcode = monthcombobox.getValue();
var grid = Ext.ComponentQuery.query('shipmentsvsgrid')[0];
grid.store.getProxy().setExtraParam('monthID', monthcode);
grid.store.load();
}
據我記得,這是'monthcombobox.setValue(thisMonth);''以某種方式觸發事件。檢查API文檔,如果您可以通過另一種不觸發事件的方式設置初始值,或者使用將在其他位置檢查的標誌,則請檢查它。 –