Javascript Extjs仅在一个视图中将新元素添加到组合框存储
大家好。 我在EXTjs中完成了一个巨大的项目,在一个特定的视图上,有一个选择国家的组合框,我想添加一个名为“WW”(全球)的新“虚拟国家”,仅在存储加载到这个特定点之后 我的第一次尝试是直接向应用商店添加一个侦听器,但这在应用商店的所有视图和所有位置都添加了新的国家/地区,这是一个巨大的失败,因为项目的其他部分无法处理这个虚拟国家/地区 所以我想在我必须使用它的地方直接添加这个新元素,但是我有一些问题(我对Ext非常陌生,而且我进入它的速度非常慢)。 事实上,我已经得出了这样的结论:Javascript Extjs仅在一个视图中将新元素添加到组合框存储,javascript,extjs,combobox,Javascript,Extjs,Combobox,大家好。 我在EXTjs中完成了一个巨大的项目,在一个特定的视图上,有一个选择国家的组合框,我想添加一个名为“WW”(全球)的新“虚拟国家”,仅在存储加载到这个特定点之后 我的第一次尝试是直接向应用商店添加一个侦听器,但这在应用商店的所有视图和所有位置都添加了新的国家/地区,这是一个巨大的失败,因为项目的其他部分无法处理这个虚拟国家/地区 所以我想在我必须使用它的地方直接添加这个新元素,但是我有一些问题(我对Ext非常陌生,而且我进入它的速度非常慢)。 事实上,我已经得出了这样的结论: tbar
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'
});
}
}
}
这似乎是个骗局,合法吗?我关心的是添加此国家/地区“仅一次”,因此afterRender似乎是选择的正确事件,因为组合框中不存在“load”(加载)(我在某个地方读过)如果将其添加到存储中,则它在存储中,绑定到存储的所有视图和组件都将使用该国家/地区 如果您需要数据略有不同的存储,我只能建议使用 您必须注意的主要限制是,在链式存储中,您可以过滤掉源中仍然可用的数据;不能添加数据 因此,您可以从包含所有应显示在任何位置的数据的存储开始,然后筛选出不希望在某些组件/视图中显示的内容:
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');
}
}]
});
如果将其添加到存储中,则它位于存储中,绑定到存储的所有视图和组件都将使用国家/地区 如果您需要数据略有不同的存储,我只能建议使用 您必须注意的主要限制是,在链式存储中,您可以过滤掉源中仍然可用的数据;不能添加数据 因此,您可以从包含所有应显示在任何位置的数据的存储开始,然后筛选出不希望在某些组件/视图中显示的内容:
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');
}
}]
});
我不明白,你说的“只有一次”是什么意思?每当这个代码运行时,你的记录总是会被插入。事实上,我害怕每次用户用组合框打开面板时都会得到一个“worldwide”,但似乎afterrender只启动了一次,顺便说一下,我只得到一个世界范围的国家,现在没问题,我正在设法找出如何增强代码,但实际上这是在耍花招。我不明白,你说的“只有一次”是什么意思?每当这个代码运行时,你的记录总是会被插入。事实上,我害怕每次用户用组合框打开面板时都会得到一个“worldwide”,但似乎afterrender只启动了一次,顺便说一下,我只得到一个世界范围的国家,现在没问题,我正在设法找出如何增强代码,但事实上,这就是诀窍。不幸的是,我无法更改存储数据,因此我无法向数据中添加新字段以将其过滤掉。不幸的是,我无法更改存储数据,因此我无法向数据中添加新字段以将其过滤掉。