ExtJS网格过滤器:如何从外部json加载'list'过滤器选项?

时间:2011-05-14 19:43:49

标签: javascript json extjs grid store

我有一个ExtJS(4.0)网格,它工作正常。现在我希望它通过添加过滤器来推进它。我希望用户能够按状态过滤项目。

我创建了以下商店:

var status_store = Ext.create('Ext.data.Store', {
    model: 'Statuses',
    proxy: {
        type: 'ajax',
        url: '/json/statuses/',
        reader: 'json'
    }
});

我可以看到它加载,/ json / statuses /将返回以下json对象:

[
  {
    "name": "OK",
    "isActive": true
  },
  {
    "name": "Outdated",
    "isActive": true
  },
  {
    "name": "New",
    "isActive": true
  }
]

现在我定义过滤器:

var filters = {
    ftype: 'filters',
    encode: encode,
    local: local,
    filters: [{
        type: 'list',
        dataIndex: 'name',
        store: 'status_store',
        labelField: 'name'          
    }]
};

并将过滤器添加到我的列定义中:

{text: 'Status', width: 120, dataIndex: 'status', sortable: true, filterable: true, filter: {type: 'list'}},

当网格加载时,我会收到以下错误:

Uncaught TypeError: Object json has no method 'read' (ext-all-debug.js:25702)

当我点击菜单的列标题时:

Uncaught TypeError: Object status_store has no method 'on' (ListMenu.js:69)

我该如何解决这个问题,或者我在做一些概念错误的事情?

以下是我的代码的完整引用,以防万一:http://pastebin.com/SNn6gFJz

3 个答案:

答案 0 :(得分:3)

感谢您诊断问题。 4.1修复是这个修改ListMenu.js

在构造函数的else部分

替换

        me.store.on('load', me.onLoad, me);

        // add a listener to the store object
        var storeObject = Ext.StoreMgr.lookup(me.store);
        storeObject.on('load', me.onLoad, me);
        me.store = storeObject;

答案 1 :(得分:0)

filters: [{
             type: 'list',
             dataIndex: 'name',
             store: 'status_store',
             labelField: 'name' ,
             options:[a,b]
         }]

您还必须在列表过滤器中提供选项。

答案 2 :(得分:0)

我遇到了类似的问题。我在这里关注了另一个答案的@jd评论但是选项菜单只是说“正在加载......”。我解决了这个问题here