我正在使用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对象。
我能以任何方式使这个更干净吗?
答案 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。