如何在ExtJS Itemselector中为商店动态分配值?

时间:2011-12-20 11:09:54

标签: extjs itemselector

我必须在itemselector中的右多选框中填充值。 首先我需要保持空白然后选择上面的组合框中的项目,我必须相应地填写值。我已经尝试了这个并且此刻崩溃,似乎没有任何错误。以下是代码段:

var userList = GetUserList();
    var aoiList = GetAOIList();
    var userAOIs = "";
    var selectedUser="";    

    var userStore = new Ext.data.ArrayStore({
                fields: ['user'],
                data: userList
            });

    var aoiStore = new Ext.data.ArrayStore({
        fields: ['aoiList'],
        data: aoiList
    }); 
    var userAOIStore = new Ext.data.ArrayStore({
        fields: ['userAOIs'],
        data: userAOIs
    });     

    var aafp = new Ext.FormPanel({
        width : 350,
        frame : true,
        autoHeight : true,
        bodyStyle : 'padding: 2px 5px 0 2px;',
        labelWidth : 100,
        defaults : {
            anchor : '95%',
            allowBlank : false,
            msgTarget : 'under'
        },
        items : [ {
            xtype : 'combo',
            fieldLabel : 'Choose User',
            emptyText: "Select User...",
            id : 'userId',
            name : 'user',
            multiSelect: false,
            store: userStore,
            displayField: 'user',
            mode: 'local',
            editable: false,
            typeAhead: true,
            triggerAction: 'all',
            listeners:{select:{fn:function(combo, value) {
                selectedUser = value.get('user');
                userAOIs = myAOIs(selectedUser);                
                userAOIStore = new Ext.data.ArrayStore({
                    fields: ['userAOIs'],
                    data: userAOIs});
                aafp.getForm().findField("itemselector").reset();
                }}
            },
            value : selectedUser

        },{         
            xtype: 'itemselector',
            name: 'itemselector',
            fieldLabel: 'AOISelector',
            imagePath: 'ext-3.4.0/examples/ux/images/',
            drawUpIcon:false,
            drawDownIcon:false,
            drawTopIcon:false,
            drawBotIcon:false,
            multiselects: [{
                width: 250,
                height: 200,
                store: aoiStore,
                displayField: 'aoiList'               
            },{
                width: 250,
                height: 200,
                store: userAOIStore,
                displayField: 'userAOIs',
                valueField: 'userAOIs'          
            }]  
    }]

最初我怀疑“aafp.getForm()。findField(”itemselector“)。reset()”调用并认为可能有一些其他函数动态重新加载表单中的元素,而不是重置可能是用于重置/擦除字段中的数据,但重置正在重新加载内容。 请提供您的投入如何实现这一目标?

由于

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

1)创建商店。 2)将商店添加到组件 3)当触发“被选中”被触发时,获取存储的组件,您希望动态添加并创建新记录并将其添加到商店。

修改 尝试这样的事情(我认为你想要的)注意代码不准确,因为我不确定你想要做什么,但它应该让你知道你需要做什么。

listeners:{select:{fn:function(combo, value) {
               var selectedUser = value.get('user');

           var record = Ext.data.Record.create([
                 'user' : selectedUser 
                ]);

               var cmp = Ext.getCmp('compId');//Get the comp that contains the store you want to add to put the cmp id here to look it up
               cmp.store.removeAll();//Clear the store
           cmp.store.add([record]);//Add the new record into the store

    }, this}

答案 1 :(得分:0)

感谢您的投入,这很有帮助。

我发现了问题:我正在创建Ext.data.ArrayStore的新实例,但视图已链接到上一个实例。 所以我使用了之前的实例,从中删除了所有内容并添加了新记录,jus就像theboulderer建议的那样。但我发现我们不必抓住itemselector商店的句柄,它会随着修改后的商店自动更新。

样品:

            var tempUserAOIStore = new Ext.data.ArrayStore({
                     fields: ['userAOIs'],
                    data: [['8'], ['9']]
                    });
            userAOIStore.removeAll();
            userAOIStore.add(tempUserAOIStore.getAt(0));
            userAOIStore.add(tempUserAOIStore.getAt(1));                

现在,ArrayStore中的这个工具对我来说也是一个问题,因为商店是如此紧密绑定,如果我想将原始文件保存在某个临时存储中,它也会被修改。即

如果我这样做:

B = A; 

Itemselector: store = A

A.remove(some records)

我发现B也被修改为A被修改。我在这里回答所以猜测必须将此作为一个单独的问题发布