1

我必须在项目选择器的右侧多选框中填写值。首先,我需要将其保留为空白,然后在其上方的组合框中选择一个项目,我必须相应地填充值。我已经尝试过这个并且它现在崩溃了,似乎没有任何问题。这是代码片段:

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()" 调用,并认为可能有一些其他函数可以动态重新加载表单中的元素,而不是用于重置的重置/erase 字段中的数据,但 reset 正在重新加载内容。请提供您的意见,这是如何实现的?

谢谢

4

2 回答 2

1

你可以试试这个:

1)创建商店。2) 将商店添加到组件 3) 当侦听器“selected”被触发时,获取您想要动态添加到的商店的组件并创建新记录并将其添加到商店。

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

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}
于 2011-12-20T11:51:25.633 回答
0

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

我发现了问题:我正在创建 Ext.data.ArrayStore 的一个新实例,但该视图已链接到前一个实例。因此,正如 theboulderer 建议的那样,我使用了前一个实例,从中删除了所有内容并添加了新记录。但是我发现我们不用去捕获itemselector store的句柄,它会自动更新到修改后的store。

样本:

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

现在 ArrayStore 中的这个设施对我来说也是一个问题,因为商店绑定得非常紧密,如果我想将原始存储保留在某个临时存储中,它也会被修改。IE

如果我做 :

B = A; 

Itemselector: store = A

A.remove(some records)

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

于 2011-12-22T05:30:40.573 回答