我必须在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()”调用并认为可能有一些其他函数动态重新加载表单中的元素,而不是重置可能是用于重置/擦除字段中的数据,但重置正在重新加载内容。 请提供您的投入如何实现这一目标?
由于
答案 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被修改。我在这里回答所以猜测必须将此作为一个单独的问题发布