2012-11-29 12 views
0

我在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(); 
} 
+0

據我記得,這是'monthcombobox.setValue(thisMonth);''以某種方式觸發事件。檢查API文檔,如果您可以通過另一種不觸發事件的方式設置初始值,或者使用將在其他位置檢查的標誌,則請檢查它。 –

回答

0

乾淨的替代方法也是在報告預加載完成時設置值。 在控制初始化時,您可以將emptyText設置爲您想要的值,並且不會觸發任何事情。

+0

這最終成爲最佳解決方案,儘管隨後我們只是在添加了聽衆時才改變,這樣我們就不會在將來遇到問題(希望) – Wige

0

您是否嘗試過使用setRawValue方法?

+0

我試過這個,但它用值而不是與它相關的顯示文本填充下拉。 – Wige

0
onMonthComboAfterRenderDo: function(monthcombobox) { 
    monthcombobox.initialSet = true; 
    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); 
} 

onMonthComboSelectDo: function(monthcombobox) { 
    if(monthcombobox.initialSet) { 
     monthcombobox.initialSet = false; 
     return false; 
    } 
    var monthcode = monthcombobox.getValue(); 
    var grid = Ext.ComponentQuery.query('shipmentsvsgrid')[0]; 
    grid.store.getProxy().setExtraParam('monthID', monthcode); 
    grid.store.load(); 
}