Sencha Touch:如何从复杂的JSON对象中获取数据

时间:2011-11-23 10:16:00

标签: json listview nested extjs

我无法从复杂的json对象中检索记录,但我可以在使用TPL时获取数据。

请参阅以下示例代码:

JSON:

{
"lists": [
    {
        "title": "Groceries",
        "id": "1",
        "items": [
            {
                "text": "contact solution - COUPON",
                "listId": "1",
                "id": "4",
                "leaf": "true" 
            },
            {
                "text": "Falafel (bulk)",
                "listId": "1",
                "id": "161",
                "leaf": "true" 
            },
            {
                "text": "brita filters",
                "listId": "1",
                "id": "166",
                "leaf": "false" 
            }
        ] 
    } 
]

型号:

Ext.regModel("TopModel", 
{
    fields: [
        { name: 'title', type: 'string' },
        { name: 'id', type: 'string' },
    ],
    hasMany: [
        { model: 'SubModel', name: 'items' }
    ],
    proxy: {
    type: 'ajax',
    url : 'test/lists.json',
        actionMethods: {
            create: 'POST',
            destroy: 'POST',
            read: 'POST',
            update: 'POST'
    },
    reader: {
        type: 'json',
        root: function(data) {
                    return data.lists || [];
                }
    }
   }
});

Ext.regModel("SubModel", 
{
    fields: [
            { name: 'text', type: 'string'},
        { name: 'listId', type: 'string'},
        { name: 'id', type: 'string'},
        { name: 'leaf', type: 'string'}
    ]
});

在我的View文件中,我已将商店定义如下。

this.stores = new Ext.data.Store({
            clearOnPageLoad: false,
        autoLoad:true,
            model:'TopModel',
        getGroupString: function(record) {
        return record.get('leaf');
            }
});
});

我无法检索 record.get('leaf')的值,因为它指的是子模型项。当我尝试打印时,它打印为未定义。

如何访问子属性?这里'items'列为数组。

我尝试使用如下列表显示数据。显示所有记录但问题是它被选为一个整体项而不是每个项的单独列表。

var list = new Ext.List({
    cls: 'big-list',
    grouped : true,
    emptyText: '<div>No data found</div>',
    itemTpl: ['<div><tpl for="items">',
        '<div>',
        '{id} {text}',
        '</div>',
        '</tpl></div>',
        ],
    store: this.stores,
    listeners: {
        itemtap: this.onListItemTap,
        scope: this
    }
});

请帮助我了解如何将列表项目显示为单独的记录。

1 个答案:

答案 0 :(得分:4)

您可以使用在线json解析器(http://json.parser.online.fr/)从解析器数据中解析json xml,您可以轻松地分离对象和数组,并获得所有需要的数据。我希望这可以帮助您