使用DirectJNgine DirectStore填充ExtJS网格

时间:2009-11-24 21:13:11

标签: javascript extjs

我正在尝试使用DirectStore填充网格。虽然我可以在Firebug中看到数据,但网格中没有数据出现。我甚至试图将数据转储到DataView中以查看我是否可能在GridPanel中搞乱,但也没有显示任何内容。尝试使用JSON和XML阅读器无济于事。

知道这里可能会发生什么吗?

这是javascript:

var RecordDef = Ext.data.Record.create([
    {name: 'ProgramName'}
]);

var jsonReader = new Ext.data.JsonReader({
    root: 'list',
    fields: [
           {name: 'ProgramName',  type: 'string'}
        ]
});

var xmlReader = new Ext.data.XmlReader({
    record: "ProgramName"
}, RecordDef);

var mystore = new Ext.data.DirectStore({
    autoLoad: true, 
    reader: jsonReader,
    paramsAsHash: false,
    storeId:'mystore',
    directFn: DataAction.getProgramNames
});

var grid = new Ext.grid.GridPanel({
    renderTo:'grid',
    store: mystore,
    columns: [
        {id:'ProgramName', header: 'ProgramName', sortable: true, dataIndex: 'ProgramName'}
    ],
    stripeRows: true,
    autoExpandColumn: 'ProgramName',
    fitToFrame: true,
    fitContainer: true,
    height: 200,
    title: 'Coolness',
});

这就是我在Firebug中看到的数据:

{"result":
     "{\"list\":
           [{\"ProgramName\":\"Name1\"},
            {\"ProgramName\":\"Name2\"},
            {\"ProgramName\":\"Name3\"},
            {\"ProgramName\":\"Name4\"}]}",
 "tid":2,"action":"DataAction","method":"getProgramNames","type":"rpc"}

1 个答案:

答案 0 :(得分:1)

您的结果值是一个字符串,而不是包含数组的名为list的对象。它应该看起来像这样(请注意,整个“结果”值的双引号已被删除):

{"result":
     {\"list\":
           [{\"ProgramName\":\"Name1\"},
            {\"ProgramName\":\"Name2\"},
            {\"ProgramName\":\"Name3\"},
            {\"ProgramName\":\"Name4\"}]},
 "tid":2,"action":"DataAction","method":"getProgramNames","type":"rpc"}

这样,您就不需要转义所有的双引号。