0

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

3 回答 3

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();
}
于 2012-11-29T18:44:12.067 回答
0

一个干净的替代方案也是在报告预加载完成时设置值。在控件初始化时,您可以将 设置为emptyText您想要的值,并且不会触发任何内容。

于 2012-11-29T14:58:45.320 回答
0

您是否尝试过使用该setRawValue方法?

于 2012-11-29T14:51:01.863 回答