打印嵌套的json值不适用于ExtJS

时间:2015-05-07 07:07:18

标签: javascript json extjs extjs5

我以这种格式从我的webservice获取了一个json响应字符串:

{
   "id":"1", 
   "name":"Steve", 
   "age":"50", 
   "items":[
        {"itemType":"item1"}, 
        {"itemType":"item2"}
   ]
}

我有一个指定的" json"作为我的商店中的reader,但它似乎无法解析嵌套的json部分:

Ext.define('MyApp.model.Persons',{
     extend: 'Ext.data.Store',
     model: 'MyApp.model.Person',
     storeId: 'PersonStore',
     proxy: {
        type: 'ajax', 
        url: 'http://localhost:80/index.php?person=get', 
        reader: {
           type: 'json'
        }
    }
});

当我在网格中选择一行时,我可以获取如下的值:

var record = grid.getSelectionModel().getSelection();
console.log(record[0].get('name'));  // prints "Steve"

但是提取items不起作用:

console.log(record[0].get('items')[0]);  // prints "Undefined"

如何打印此人的物品?

修改

Ext.define('MyApp.model.Person',{
     extend: 'Ext.data.Model',
     idProperty: 'id',
     fields: [
         {name: 'id', type: 'int'},
         {name: 'name', type: 'string'},
         {name: 'age', type: 'int'},
     ],
     hasMany: {
         model: 'MyApp.model.Item',
         name: 'items',
         associationKey: 'items'    
     } 
});

Ext.define('MyApp.model.Item',{
     extend: 'Ext.data.Model', 
     fields: [
         {
             name: 'id', 
             type: 'int'
         },
         {
             name: 'itemType', 
             type: 'string'
         }
     ],
     belongsTo: 'MyApp.model.Person'     
});

编辑2:

Ext.define('MyApp.model.Persons',{
     extend: 'Ext.data.Store',
     model: 'MyApp.model.Person',
     storeId: 'PersonStore',
     proxy: {
        type: 'ajax', 
        url: 'http://localhost:80/index.php?person=get', 
        reader: {
           type: 'jsonpersonreader'
        }
    }
});

Ext.define('MyApp.reader.JsonPersonReader',{
     extend: 'Ext.data.reader.Json',
     alias: 'reader.jsonpersonreader',
     getResponseData: function(response) {

         return JSON.parse(response.responseText);
     }
});

1 个答案:

答案 0 :(得分:0)

¿您是否尝试过不使用“hasMany”配置?而是做这样的事情:

    Ext.define('MyApp.model.Person',{
     extend: 'Ext.data.Model',
     idProperty: 'id',
     fields: [
         {name: 'id', type: 'int'},
         {name: 'name', type: 'string'},
         {name: 'age', type: 'int'},
         {name: 'items', type:'auto'}
     ]
});

并使用:

<强>记录[0]获得( '项目')[0] .ID

<强>记录[0] .items [0] .ID