存储加载后,extjs组合框不会更新

时间:2013-01-28 14:20:02

标签: combobox extjs4 store

在我的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'
}

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

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

我缺少什么? 谢谢

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

1 个答案:

答案 0 :(得分:0)

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

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