美好的一天。 我在EXTjs完成了一个庞大的项目,在一个特定的视图中,有一个组合框用于选择国家,我想添加一个新的虚拟国家"叫" WW" (WorldWide),就在商店仅在此特定点加载之后。
我的第一次尝试是直接向商店添加一个监听器,但这在所有视图和商店使用的所有地方添加了新国家,这是一个很大的失败,因为项目的其他部分都没有建成处理这个虚拟国家。
所以我想直接在我必须使用它的地方添加这个新元素,但是我遇到了一些问题(我对Ext很新,而且我很慢地进入它) 。 实际上我已经得到了类似的东西:
tbar: [
{
xtype: 'adcombobox',
displayField: 'name',
id:'formCountry',
reference: 'formcountry',
valueField: 'id',
store: 'Countries',
value: 0,
minChars: 0,
queryMode: 'local',
typeAhead: true,
forceSelection: true,
allowBlank: false,
emptyText: 'Select a country',
listConfig: {
itemTpl: [
'<div><span class="" style="margin-right: 10px;"><img src="resources/flags/{id}.png"></span>{name}</div>'
]
},
listeners: {
select: 'onCountrySelect',
onLoad: function(store) {
store.insert(0, {
id:"ww",
shortCode: 'WW',
name: 'WorldWide'
});
}
}
}
这没有任何作用。 我不确定我是否在调用错误的事件,或者某事...... 有人可以帮我吗?你能引导我走向正确的道路吗? 我也使用了#34; load&#34;事件,没有成功。
更新1:
此刻我已经提供了这个解决方案:
listeners: {
select: 'onCountrySelect',
afterRender: function(store) {
this.getStore().insert(0, {
id:"ww",
shortCode: 'WW',
name: 'WorldWide'
});
}
}
似乎成功的伎俩,是否合法?我担心的是只添加一次这个国家&#34;所以afterRender似乎是正确的选择事件,因为&#34;加载&#34;组合框中没有(我在某处读过)..
答案 0 :(得分:0)
如果您将其添加到商店,它就在商店中,并且绑定到商店的所有视图和组件都将使用该国家/地区。
如果您需要的数据略有不同的商店,我只推荐使用ChainedStore
。
您必须注意的主要限制是,在链式存储中,您可以过滤掉源中仍然可用的数据;你无法添加数据。
因此,您将从包含应该在任何位置显示的所有数据的商店开始,然后筛选出您不希望在某些组件/视图中显示的内容:
Ext.define('AllCountries',{
extend:'Ext.data.Store',
storeId: 'AllCountries',
inlineData:[{
name: 'France',
fictional: false
},{
name: 'Germany',
fictional: false
},{
name: 'Middle-earth',
fictional: true
}]
});
Ext.define('FictionalCountries',{
extend: 'Ext.data.ChainedStore',
storeId: 'FictionalCountries',
source: 'AllCountries',
filters:[{
filterFn:function(country) {
return country.get('fictional');
}
}]
});
Ext.define('NonFictionalCountries',{
extend: 'Ext.data.ChainedStore',
storeId: 'NonFictionalCountries',
source: 'AllCountries',
filters:[{
filterFn:function(country) {
return !country.get('fictional');
}
}]
});