我在 ExtJS 4 中有一个组合框,它分配了两个侦听器。一个是在afterrender上,选择一个默认值。(组合框列出月份,默认网格有当月的数据,我希望组合框显示本月。)另一个是选择,它会根据所选月份获取报告。由于报告已预加载,我不希望它在组合框的预填充时激活,仅在组合框的后续使用(即人机交互)时激活。
这就是我设置监听器的方式:
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();
}