Extjs4 - 在itemselector中重新加载商店

时间:2012-03-02 13:54:19

标签: extjs4

我在网格中有一个itemselecor,我有一个组合框,只能重新加载itemselector中的商店(值字段应保持不变)

这是itemselector

var grid = Ext.widget('form', {
        id: 'grid',
        title: '',
        width: 600,
        bodyPadding: 10,
        renderTo: 'itemselectorproduto',
        items: [{
            xtype: 'itemselector',
            name: 'itemselector',
            id: 'itemsel',
            anchor: '100%',
            imagePath: '/ux/images/',
            store: store,
            displayField: 'Nome',
            valueField: 'ID',
            value: vitrine,
            allowBlank: true,
            msgTarget: 'side'
        }]
    });

我试图调用正常的store.load(),但它没有效果,并且在控制台上没有显示错误

如果需要,我会发布更多代码,但我认为这应该足够了

谢谢,

2 个答案:

答案 0 :(得分:0)

查看代码,如果ItemSelector它看起来不像它支持商店中的任何更改一旦被绑定。它基本上创建了数据的本地副本。如果你调用bindStore方法来分配不同的商店 - 它将删除你的选择。

您可以随时改进ItemSelector中的代码以允许此类行为。这应该不是问题。您可以在绑定时订阅商店的datachanged或load事件,然后在存储数据更改时处理情况。

答案 1 :(得分:0)

实际上我认为做这种事情的最好方法是使用ItemSelector的“populateFromStore”。当然除了扩展项目选择器。如果需要扩展,您应该查看ItemSelector的“onBindStore”函数。

onBindStore: function(store, initial) {
    var me = this;

    if (me.fromField) {
        me.fromField.store.removeAll()
        me.toField.store.removeAll();

        // Add everything to the from field as soon as the Store is loaded
        if (store.getCount()) {
            me.populateFromStore(store);
        } else {
            me.store.on('load', me.populateFromStore, me);
        }
    }
}

因此,如果您看到空存储,它会挂钩到load事件。它应该是这样的:

    onBindStore: function(store, initial) {
    var me = this;

    if (me.fromField) {
        me.fromField.store.removeAll()
        me.toField.store.removeAll();

        me.store.on('load', me.populateFromStore, me);
        // Add everything to the from field as soon as the Store is loaded
        if (store.getCount()) {
            me.populateFromStore(store);
        }
    }
}