【问题标题】:Parse nested json with a proxy in a Sencha Touch 2 store using rootProperty使用 rootProperty 在 Sencha Touch 2 商店中使用代理解析嵌套的 json
【发布时间】:2014-08-04 15:39:28
【问题描述】:

我有一个嵌套如下的 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'
            }
        }
    }
});

我尝试了“response.user”,但它对我不起作用。我已经看过了,知道如果用户属性与“响应”处于同一级别而不是嵌套在其下,则使用 rootProperty: 'user' 会起作用。我也尝试过添加记录:'users',但这似乎也不起作用。

如果有人知道这是否可行并且有一个简单的解决方案,那就太好了。我实际上并不了解代理是如何工作的,所以如果有人可以对此进行解释,那也会有所帮助。谢谢。

【问题讨论】:

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


    【解决方案1】:

    取自 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 2012-08-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多