Javascript extjs 4.2组合框仅显示存储区的唯一条目
这不是唯一一次有人问这个问题。基本上我想知道如何过滤商店中的组合框。我知道商店有一个Javascript extjs 4.2组合框仅显示存储区的唯一条目,javascript,extjs,combobox,Javascript,Extjs,Combobox,这不是唯一一次有人问这个问题。基本上我想知道如何过滤商店中的组合框。我知道商店有一个collect方法,它的工作原理如下:store.collect('column')。问题是,在最初设置组合时使用组合框,存储区还没有将任何数据放入其中。我阅读了其他人建议在beforequery侦听器中执行此操作的地方(在测试中,我可以在此时访问存储的集合),我遇到的问题是如何从beforequery侦听器将过滤后的存储发送回组合框?当然,代码示例如下所示:(某些内容将被更改,以避免显示我们不想提供的信息) 因
collect
方法,它的工作原理如下:store.collect('column')
。问题是,在最初设置组合时使用组合框,存储区还没有将任何数据放入其中。我阅读了其他人建议在beforequery
侦听器中执行此操作的地方(在测试中,我可以在此时访问存储的集合),我遇到的问题是如何从beforequery
侦听器将过滤后的存储发送回组合框?当然,代码示例如下所示:(某些内容将被更改,以避免显示我们不想提供的信息)
因此,在beforequery中,如果我在浏览器中暂停,我可以执行me.combo.store.collect('group')
并查看集合。我知道要从store.collect()
中使用集合,我必须删除displayField
和valueField
。我只是不知道如何把它放回组合框。除了创建一个全新的商店之外,我还试图找到一种通用的方法来实现这一点
任何帮助或想法都将不胜感激 这个问题的简单答案是保持组合框的原样,使用专门为要筛选的列表设置的单独存储。在我们的示例中,我们过滤一个箱号列表,创建一个ArrayStore,并使用填充网格的源存储的collect方法填充数据。您必须小心地将
旁路过滤器
选项设置为true,以避免在列表过滤时过滤列表。ArrayStore的代码如下所示:
boxArrayStore = Ext.create('Ext.data.ArrayStore', {
storeId: 'boxArrayStore'
, fields: ['box']
, data: [[]]
, load: function(){
var parentStore = Ext.data.StoreManager.lookup('sourceStore');
var arrayData = [];
if(parentStore) {
Ext.each(parentStore.collect('box', false, true), function(value) {
arrayData.push([value]);
});
this.loadData(arrayData);
}
}
});
我们在ArrayStore中使用
load
,因为每次单击下拉列表时,组合框都会调用ArrayStore的load方法。到目前为止,我们可能必须对此解决方案进行一些更改,因为如果我们绕过过滤器,我们将无法获得已过滤的框列表,例如,如果您也按日期进行过滤。即使不在该日期范围内,您也可以获得商店中所有可用的盒子 我在下面添加了对我们有用的答案。如果它对你也有效,请投票。
boxArrayStore = Ext.create('Ext.data.ArrayStore', {
storeId: 'boxArrayStore'
, fields: ['box']
, data: [[]]
, load: function(){
var parentStore = Ext.data.StoreManager.lookup('sourceStore');
var arrayData = [];
if(parentStore) {
Ext.each(parentStore.collect('box', false, true), function(value) {
arrayData.push([value]);
});
this.loadData(arrayData);
}
}
});