0

在我的 MVC 应用程序中,我有一个这样定义的控制器:

Ext.define('NE.controller.MyController', {
    extend: 'Ext.app.Controller',
    stores : [...'StoreAgents'..],

    views: [ ...'MyView'...], // * alias w_view

    init: function() {
        this.control({
            'w_view': {
                render: function() { this.getStore('StoreAgents').load(); }
            }
        });
    }
});

在 MyView 视图中,我定义了一个组合框,如下所示:

{
    xtype: 'combobox',
    name : 'id_agent',
    forceSelection: true,
    fieldLabel: 'Agent',
    store: 'StoreAgents',
    queryMode: 'local',
    displayField: 'name',
    valueField: 'id'
}

我希望每次呈现视图时都会更新组合框列表,我错了吗?目前,组合框仍然没有任何选项,即使我(通过萤火虫)看到应用程序触发了正确返回所有代理数据的请求。

此外,我注意到,每当我浏览由另一个控制器管理的另一个视图时,该控制器又声明另一个 StoreAgent 并调用其 load() 方法。好吧,如果我回来,现在我看到组合框已填充。

我错过了什么?谢谢

编辑: 我注意到商店是{buffered: true}. 如果我将其切换为 false,则商店会触发“datachange”事件;否则它不会。所以现在的问题是:为什么如果启用缓冲,load() 不会触发“datachange”?

4

1 回答 1

0

这可能是由于过滤掉的情况。如果组合框在存储加载之前填充了一个值,则将在存储上放置一个过滤器,在它们存在之前过滤掉所有值,然后在添加新记录时它们也不会显示。尝试这个。

init: function() {
        this.control({
            'w_view': {
                render: function() { this.getStore('StoreAgents').load(); 
                this.getStore('StoreAgents').clearFilter();}
            }
        });
    }
于 2013-01-28T14:26:05.073 回答