使用rootProperty在Sencha Touch 2商店中使用代理解析嵌套的json

时间:2014-06-14 02:45:04

标签: json nested sencha-touch-2 store sencha-architect

我有一个嵌套的JSON响应,如下所示(简化,但格式相同):

{
    "response":{
        "v":"1.0",
        "users":[
            {
            "firstName":"Nicole",
            "LastName":"A",
            },
            {
            "firstName":"John",
            "LastName":"B",
            },
            {
            "firstName":"Bob",
            "LastName":"C",
            }
        ],
    }
}

以下是模型:

Ext.define('MyApp.model.User', {
    extend: 'Ext.data.Model',

    requires: [
        'Ext.data.Field'
    ],

    config: {
        fields: [
            {
                name: 'firstName'
            },
            {
                name: 'lastName'
            }
        ]
    }
});

我从CityBars的sencha架构师教程开始,所以大部分代码应该是非常基础的,我只是试图让用户从json响应中加载。这是控制器:

Ext.define('MyApp.controller.User', {
    extend: 'Ext.app.Controller',

    launch: function() {
                var me = this;
                Ext.Viewport.setMasked({ message: 'Loading Attendees...' });
                me.getUsers(function (store) {
                me.getDataList().setStore(store);
              });
    },

    getUsers: function(callback) {
            var store = Ext.data.StoreManager.lookup('UserStore'),
            url = 'http://urltogetjsonresponse'
            store.getProxy().setUrl(url);
            store.load(function() {
                            callback(store);
                          });
    },
});

这是商店:

Ext.define('MyApp.store.UserStore', {
    extend: 'Ext.data.Store',

    requires: [
        'MyApp.model.User',
        'Ext.data.proxy.JsonP',
        'Ext.data.reader.Json'
    ],

    config: {
        model: 'MyApp.model.User',
        storeId: 'UserStore',
        proxy: {
            type: 'jsonp',
            reader: {
                type: 'json',
                rootProperty: 'response.user'
            }
        }
    }
});

我试过了响应。用户'但它对我不起作用。我已经全神贯注地知道使用rootProperty:' user'如果用户属性与"响应"处于同一级别,则可以正常工作而不是嵌套在它下面。我也尝试过添加记录:'用户'但这似乎也没有用。

如果有人知道这是否可行并且有一个简单的解决方案,这将是伟大的。我实际上并不了解代理是如何工作的,所以如果有人能够解释一下这个问题,它也会有所帮助。感谢。

1 个答案:

答案 0 :(得分:0)

取自Sencha关于JSON阅读器的文档:

{
    "count": 1,
    "ok": true,
    "msg": "Users found",
    "users": [{
        "userId": 123,
        "name": "Ed Spencer",
        "email": "ed@sencha.com"
    }],
    "metaData": {
        "idProperty": 'userId',
        "rootProperty": "users",
        "totalProperty": 'count',
        "successProperty": 'ok',
        "messageProperty": 'msg'
    }
}

这里的rootProperty是用户',因此您需要指定users(这是包含您的模型实例的数组的名称),而不是user