Фильтры сетки ExtJS: как я могу загрузить опции фильтра «список» из внешнего json? - PullRequest
2 голосов
/ 14 мая 2011

У меня есть сетка 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 ]

3 голосов
/ 22 августа 2012

Спасибо за диагностику проблемы.Исправление 4.1 - это изменение ListMenu.js

в остальной части конструктора

заменить

        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;
0 голосов
/ 10 февраля 2012

У меня была похожая проблема.Я следовал за комментарием @jd к другому ответу здесь, но меню опций просто сказало «загрузка ...».Я решил это с небольшим взломом здесь .

0 голосов
/ 01 июля 2011
filters: [{
             type: 'list',
             dataIndex: 'name',
             store: 'status_store',
             labelField: 'name' ,
             options:[a,b]
         }]

Вы также должны указать опции в фильтрах списка.

...