Noa*_*ins 7 sencha-touch sencha-touch-2
我正在开发一个基本的Sencha Touch应用程序,该应用程序显示文本消息列表以及发送消息的关联用户的名称.我已经在线阅读了有关如何设置模型关联的教程,但每个教程都假设服务器生成具有嵌套结构的数据.
我正在使用的数据具有主/外键关系的扁平结构,我无法弄清楚如何让Sencha从单个响应中加载两个存储.
模型/ user.js的
Ext.define('App.model.User', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'uid', type: 'number' },
{ name: 'name', type: 'string' },
]
}
});
Run Code Online (Sandbox Code Playgroud)
存储/ Users.js
Ext.define('App.store.Users', {
extend: 'Ext.data.Store',
config: {
model: 'App.model.User',
autoLoad: true,
}
});
Run Code Online (Sandbox Code Playgroud)
模型/ Message.js
Ext.define('App.model.Message', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'id', type: 'number' },
{ name: 'uid', type: 'number' },
{ name: 'message', type: 'string' }
],
associations: [{
type: 'belongsTo',
model: 'App.model.User',
primaryKey: 'uid',
foreignKey: 'uid'
}],
proxy: {
type: 'jsonp',
url: 'messages.json',
reader: {
type: 'json',
rootProperty: 'req_messages'
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
存储/ Messages.js
Ext.define('App.store.Messages', {
extend: 'Ext.data.Store',
config: {
model: 'App.model.Message',
autoLoad: true,
}
});
Run Code Online (Sandbox Code Playgroud)
我的应用程序正确加载和显示消息(下面的示例JSON响应),但我无法弄清楚如何将关联的用户加载到存储中.这可以通过配置解决,还是需要自定义阅读器?任何帮助赞赏!
示例JSON
{
"users": [{
"uid": "1",
"name": "John"
}, {
"uid": "3033",
"name": "Noah"
}],
"req_messages": [{
"id": "539",
"uid": "1",
"message": "my message"
}, {
"id": "538",
"uid": "1",
"message": "whoops"
}, {
"id": "534",
"uid": "3033",
"message": "I love pandas."
}]
}
Run Code Online (Sandbox Code Playgroud)
我从来没有真正与协会合作过,我浏览了文档,试图找到可以根据要求加载两个商店的东西,但我找不到任何东西。所以我会这样做:
模型
Ext.define('App.model.User', {
extend: 'Ext.data.Model',
config: {
fields: [
'uid',
'name'
]
}
});
Ext.define('App.model.Message', {
extend: 'Ext.data.Model',
config: {
fields: [
'id',
'message',
'uid'
],
associations: { type: 'hasOne', model: 'User', primaryKey: 'uid', foreignKey: 'uid'}
}
});
Run Code Online (Sandbox Code Playgroud)
商店
Ext.define('App.store.Users', {
extend: 'Ext.data.Store',
config: {
model: 'App.model.User',
autoLoad: true,
proxy: {
type: 'ajax',
url: 'http://www.titouanvanbelle.fr/test.json',
reader: {
type: 'json',
rootProperty: 'users'
}
},
listeners:{
load:function(s,r,success,op){
var msgs = JSON.parse(op.getResponse().responseText).req_messages;
Ext.each(msgs, function(msg) {
Ext.getStore('Messages').add(Ext.create('App.model.Message',msg));
});
}
}
}
});
Ext.define('App.store.Messages', {
extend: 'Ext.data.Store',
config: {
model: 'App.model.Message'
}
});
Run Code Online (Sandbox Code Playgroud)
列表
Ext.define("App.view.Main", {
extend: 'Ext.Panel',
config: {
fullscreen: true,
layout:'fit',
items: [{
xtype:'list',
store:'Messages',
itemTpl: new Ext.XTemplate(
'<tpl for=".">',
'{[this.getUserName(values)]} : {message}',
'</tpl>',
{
getUserName(v){
var s = Ext.getStore('Users'),
u = s.getAt(s.find('uid',v.uid));
return u.get('name');
}
}
)
}]
}
});
Run Code Online (Sandbox Code Playgroud)
你会得到这样的东西:
希望这可以帮助。如果您需要解释,请告诉我。
归档时间: |
|
查看次数: |
2274 次 |
最近记录: |