extJS - не удается получить данные для отображения в GridPanel - PullRequest
0 голосов
/ 06 апреля 2009

В приведенном ниже коде используется Ext.data.Store для извлечения JSON с метаданными таблицы (для заголовков столбцов) и данными таблицы. PHP-скрипт бэкэнда работает правильно, и Ext.data.Store содержит действительные записи для данных - я просто не могу заставить их «войти» в саму Grid.

Документация API создает впечатление, будто я просто определяю свойство store для Ext.grid.GridPanel, и оно будет обрабатывать все остальное.

Примечание: приведенный ниже код является отдельным от остальной части приложения. Мы вытащили эту часть, чтобы посмотреть, сможем ли мы просто заставить работать сетку, без влияния остальной части приложения.

Ext.BLANK_IMAGE_URL = 'js/ext/resources/images/default/s.gif';
Ext.onReady(function() {
    var columns = [];
    var fields = [];


    var tabPanel = new Ext.TabPanel({
        renderTo: Ext.getBody(),
        activeTab: 0,
        height: 700
    });

    var queryHeaders = Ext.data.Record.create([
        {name: 'id'},
        {name: 'table'},
        {name: 'field'},
        {name: 'title'}
    ]);

    var applicationStore = new Ext.data.Store({
        autoLoad: true,
        reader: new Ext.data.JsonReader({root: 'fields'}, queryHeaders),
        url: 'http://localhost/aargh/index.php/applications/hardware',
        listeners: {
            'load': function() {
                console.info(applicationStore);
                applicationStore.each(function(r) {
                    this_column = [];
                    this_column['header'] = r.data['title'];
                    this_column['dataIndex'] = r.data['id'];
                    columns.push(this_column);
                    this_column = []
                    this_column['name'] = r.data['id'];
                    fields.push(this_column);
                });

                console.info(fields);
                var queryFields = Ext.data.Record.create([fields]);

                var queryStore = new Ext.data.Store({
                    autoLoad: true,
                    reader: new Ext.data.JsonReader({root: 'fields'}, queryFields),
                    url: 'http://localhost/aargh/index.php/query/execute/applications/hardware',
                    listeners: {
                        'load': function() {
                            console.info(queryStore);
                            tabPanel.add(new Ext.grid.GridPanel({
                                title: 'Hardware',
                                store: queryStore,
                                columns: columns,
                                autoHeight: true,
                                frame: true
                            }));
                            tabPanel.doLayout();
                        }
                    }
                }); 
            }
        }
    }); 
});

Когда я просматриваю объекты applicationStore и queryStore в Firebug, я прекрасно вижу ожидаемые результаты данных в applicationStore.data.items.#.json и queryStore.data.items.#.json (конечно, заменяя # на номер записи).

Есть идеи?

1 Ответ

1 голос
/ 06 апреля 2009

Ух ты - это доставляет нам неприятности уже три дня. Оказывается, я делал массив в массиве в var queryFields = Ext.data.Record.create([fields]);

Изменив это на: var queryFields = Ext.data.Record.create(fields); исправил проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...