【问题标题】:Map JSON Object to Model/Store将 JSON 对象映射到模型/存储
【发布时间】:2016-01-07 05:41:35
【问题描述】:

我正在使用 Worklight 框架为 IOS 构建一个移动应用程序,并且正在使用 Sencha Touch 2.3 来构建该应用程序。

由于环境原因,我无法在 Sencha Touch Store/Model 对象中使用代理从服务器加载数据,因为我需要使用 Worklight 的适配器来检索信息。我已经设法使用一些样板代码来做到这一点。

但是,我希望我可以更多地利用 Sencha 模型,因此,我正在考虑是否可以在不指定代理的情况下自动将 JSON 对象加载到模型对象中。

目前我正在执行大量循环和 setter 调用以将数据从 JSON 对象加载到模型,如下所示:

var profile = Ext.create('Profile', {
Id: rawProfile.Id,
Name: rawProfile.Name
Age: rawProfile.Age
.....
}

其中 rawProfile 是我从服务器加载的 JSON 对象。

有什么方法可以让这个更干净?

【问题讨论】:

    标签: extjs sencha-touch-2 ibm-mobilefirst


    【解决方案1】:

    您可以创建一个模型类,该类将包含您的 rawProfile 对象中包含的数据。

    Ext.define('MyModel', {
        extend: 'Ext.data.Model',
        fields: [{
            name: 'Id',
            name: 'Age',
            ...
        }],
        proxy: {
            type: 'memory',
            reader: 'json'
        }
    });
    

    我还设置了一个内存代理,它将读取 json 对象。

    然后您可以创建一个使用您定义的模型和内存代理的 Store(这意味着您不会使用 Ext 的内置 ajax 消息传递)。

    Ext.create('MyStore', {
        model: 'MyModel',
        autoLoad: false
    });
    

    将 autoLoad 设置为 false,因为您想从其他来源获取数据。 因此,一旦您有了 json 对象,您就可以通过调用 store.loadRawData(jsonObject) 将其加载到存储中。

    在这种情况下,jsonObject 将是包含从服务器返回的所有 json 对象的对象,这意味着您的代码不必处理对记录的迭代,您可以将其留给 Sencha 类。 但是,您需要弄清楚将数据写回服务器。

    我建议运行 Sencha Data Package tutorial,因为它很好地介绍了数据包

    【讨论】:

    • 谢谢,试试看
    【解决方案2】:

    如果所有字段都与 json 对象 1:1 映射,则可以这样做:

    var profile = Ext.create('Profile', rawProfile);
    

    或者(或避免调用字段的转换函数),您可以直接在创建的模型上设置数据属性。

    var profile =  Ext.create('Profile');
    profile.data = rawProfile;
    

    同样,这需要字段和 json 对象的 1:1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-27
      • 2015-08-27
      • 1970-01-01
      • 2012-04-23
      • 2015-07-01
      • 2014-11-07
      • 1970-01-01
      • 2017-12-24
      相关资源
      最近更新 更多