将JSON对象映射到模型/存储

时间:2014-02-13 10:00:44

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

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

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

但是,我希望我能更多地使用Sencha模型,因此,我想是否可以自动将JSON对象加载到Model对象中,而无需指定代理。

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

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

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

我能以任何方式使这个更干净吗?

2 个答案:

答案 0 :(得分:1)

您可以创建一个Model类,其中包含rawProfile对象中包含的数据。

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

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

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

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

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

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

我建议您浏览Sencha Data Package tutorial,因为它为数据包提供了一个很好的介绍

答案 1 :(得分:0)

如果所有字段都使用json对象映射1:1,则可以执行以下操作:

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

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

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

同样,这需要在字段和json对象上使用1:1。