我正在尝试使用覆盖here in the ExtJS 4 API的数据存储(而不是硬编码列表)来实现Ext.ux.grid.filter.ListFilter。数据很好,我在这个列上看到了一个过滤器选项,但它只是说“正在加载...”,其中过滤器选项应该是:
我很确定我按照API规范对其进行了配置,但对此没有任何好运。有没有人正确实现这个?
我用来获取过滤器选项的商店设置如下:
// get the levels for filtering
var levelStore = Ext.create('Ext.data.Store', {
fields: ['levels'],
proxy: {
type: 'ajax',
url: '../json?queryName=levels',
reader: 'json'
},
autoLoad: true
});
我在列中实现了filter配置,如下所示:
{
header: 'Level',
dataIndex: 'levels',
width: 160,
sortable: true,
filter: {
type: 'list',
store: levelStore
}
我有些想法:
我是否需要我的过滤器选项数据存储具有特定的列标题,例如“name”而不是“level”?
这是否尝试在从ajax加载之前获取商店选项,并且有一些未指定的方式告诉它在返回ajax后加载这些过滤器选项?
我是否需要实现与列配置分开的过滤器配置才能使用此配置? (我所有的其他过滤器配置,都在列配置中完成,似乎工作正常)
修改
json响应看起来像这样,不确定是否会导致麻烦:
[{"levels":"Level 1"},{"levels":"Level 2"},{"levels":"Level 3"}]
答案 0 :(得分:2)
我现在已经解决了。我最后使用空选项数组options: []
配置过滤器,然后在商店上放置一个回调函数,将过滤器选项添加到空选项数组中。像这样:
列模型(带过滤器配置):
{
header: 'Level',
dataIndex: 'levels',
itemId: 'levels',
width: 160,
sortable: true,
filter: {
type: 'list',
options: [],
phpMode: true,
}
}
商店:
var levelStore = Ext.create('Ext.data.Store', {
fields: ['levels'],
proxy: {
type: 'ajax',
url: '../json?queryName=levels',
reader: 'json'
},
autoLoad: {
callback: function() {
grid.getView().getHeaderCt().child('#levels').initialConfig.filter.options = levelStore.collect('levels');
}
}
});
('grid'是我用过滤器命名网格的变量)
答案 1 :(得分:0)
使用ExtJs 4.0.2a
时我也一样。 I ve find what
{自动加载{1}} Ext.ux.grid.menu.ListMenu`。
商店:
must false for store and some patch to
将var levelStore = Ext.create('Ext.data.Store', {
fields: ['levels'],
proxy: {
type: 'ajax',
url: '../json?queryName=levels',
reader: 'json'
},
autoLoad: false
});
中的show方法替换为:
ext-4.0.2a/examples/ux/grid/menu/ListMenu.js
答案 2 :(得分:-1)
这很简单
filter: {
type: 'list',
options: levelStore.collect('levels')
}