【问题标题】:extJS - Can not get data to render in GridPanelextJS - 无法获取要在 GridPanel 中呈现的数据
【发布时间】:2009-04-06 13:22:29
【问题描述】:

以下代码使用Ext.data.Store 检索带有表元数据(用于列标题)和表数据的 JSON。后端 PHP 脚本工作正常,Ext.data.Store 包含有效的数据记录 - 我只是无法让它们“进入”网格本身。

API 文档看起来好像我只是为 Ext.grid.GridPanel 定义了一个 store 属性,其余部分将由它处理。

注意:下面的代码与应用程序的其余部分是分开的。我们已将这部分提取出来,看看是否可以让网格正常工作,而不受应用程序其余部分的影响。

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();
                        }
                    }
                }); 
            }
        }
    }); 
});

当我在 Firebug 中查看 applicationStorequeryStore 对象时,我可以在 applicationStore.data.items.#.jsonqueryStore.data.items.#.json 中完美地看到预期的数据结果(当然,将 # 替换为记录号)。

有什么想法吗?

【问题讨论】:

    标签: javascript gridview extjs


    【解决方案1】:

    哇 - 这已经给我们带来了三天的麻烦。结果我在var queryFields = Ext.data.Record.create([fields]);的数组中创建了一个数组

    将其更改为:var queryFields = Ext.data.Record.create(fields); 解决了该问题。

    【讨论】:

    • 嘿。所以你一发帖就知道了?
    • 此后不久 - 让我发疯。当我终于弄清楚时,发布了这个并交叉发布到 extJS 论坛。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多