无法使用loadData()在ExtJS网格面板中加载数据

时间:2011-05-13 11:48:34

标签: javascript extjs store gridpanel

我需要定期在网格商店中添加新数据。商店由以下代码定义:

this.reader = new Ext.data.JsonReader({
        idProperty: 'id',
        fields: this.lesFields
    });
this.ds = new Ext.data.GroupingStore({
        reader: this.reader,
        data: this.leData,
        sortInfo: {field: 'dendisc', direction: 'ASC'},
        groupField: 'categorie'
    });

当我需要附加一些新数据时,我会使用this.getStore().loadData(this.leData)执行此操作。从技术上讲,数据确实出现在网格的商店中,但我在显示屏上只看到零(在int字段中)和空字符串(在string字段中)。我在Chrome的控制台上做了一些研究,我发现data属性和json属性在this.getStore().data中不一样。在json中,数组中包含有效数据,但在data中只有零和空字符串。

我错过了什么吗? handleAs:'json'属性会保存情况吗?

2 个答案:

答案 0 :(得分:3)

JsonReader要求定义root。 root指向包含记录的子属性。

这里是一个取自ext文档的样本:

var myReader = new Ext.data.JsonReader({
    idProperty: 'id'
    root: 'rows',
    totalProperty: 'totalRows',
    fields: [
        {name: 'id' },
        {name: 'name' }
    ]
});

和要读取的样本数据:

{
    success: true,
    totalRows: 100,
    rows: [  // root
        { id: 1, name: 'Alf' },
        { id: 2, name: 'Ben' },
        { id: 3, name: 'Cod' },
        ...
    ]
}

答案 1 :(得分:1)

我不习惯GroupingStores,但我认为Reader期望像{ Id:0, Name: 'MyName' }这样的json对象或这些对象的数组,然后尝试将它们与已注册的字段名匹配。但我不知道你的数组中有什么,所以这只是一个猜测