我尝试从我的服务器加载JSON回复,该回复通过模型的加载函数具有嵌套属性。但不知何故,只有我的嵌套属性集的第一个条目被解析。
我正在尝试加载如下的JSON文件:
{
"id" : "2",
"name" : "John",
"logins" : [
{
"id" : "4",
"person_id" : "2",
"date" : "2012-01-18 01:00:06"
},{
"id" : "9",
"person_id" : "2",
"date" : "2012-01-18 19:36:13"
},{
"id" : "12",
"person_id" : "2",
"date" : "2012-01-19 00:12:32"
}]
}
我有两个模型如下:
Ext.define('MyAppName.model.Person', {
extend : 'Ext.data.Model',
config : {
idProperty : 'id',
fields : [{
name : 'id',
type : 'int'
}, {
name : 'name',
type : 'string'
}],
hasMany : [{
model: 'MyAppName.model.Login',
name: 'logins',
associationKey: 'logins'
}],
proxy : {
type : 'ajax',
url : '../index.php?format=json',
reader : {
type : 'json'
}
}
}
});
和
Ext.define('MyAppName.model.Login', {
extend : 'Ext.data.Model',
config : {
fields : [{
name : 'id',
type : 'int'
}, {
name : 'person_id',
type : 'int'
}, {
name : 'date',
type : 'date'
}],
belongsTo: [{
model: 'MyAppName.model.Person',
associationKey: 'logins'
}]
}
});
我尝试通过
加载一个包含数据的新人MyAppName.model.Person.load(personId, {scope: ..., ..., success: function(record, operation) { -someFancyCode-} })
但是我在success函数中检索的记录现在只包含一个登录数据集。我做错了什么吗?
谢谢! NIC
答案 0 :(得分:1)
嗯,首先,模型本身并不加载嵌套数据,至少不是很好,它有一些已知的问题,所以,更好的选择是创建一个商店并通过加载你的模型那个商店,这些行中的东西:
Ext.define('MyAppName.model.Person', {
extend: 'Ext.data.Model',
idProperty: 'id',
fields: [{
name: 'id',
type: 'int'
}, {
name: 'name',
type: 'string'
}],
hasMany: [{
model: 'MyAppName.model.Login',
name: 'logins'
}],
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
Ext.define('MyAppName.model.Login', {
extend: 'Ext.data.Model',
fields: [{
name: 'id',
type: 'int'
}, {
name: 'person_id',
type: 'int'
}, {
name: 'date',
type: 'date'
}],
belongsTo: [{
model: 'MyAppName.model.Person'
}]
});
var data = {
"id": "2",
"name": "John",
"logins": [{
"id": "4",
"person_id": "2",
"date": "2012-01-18 01:00:06"
}, {
"id": "9",
"person_id": "2",
"date": "2012-01-18 19:36:13"
}, {
"id": "12",
"person_id": "2",
"date": "2012-01-19 00:12:32"
}]
};
var store = Ext.create('Ext.data.Store', {
model: 'MyAppName.model.Person',
data: data
});
var instanceModel = store.getAt(0);
//Show 'Person' model contents.
console.info(instanceModel);
//Show 'logins' for that person
console.info(instanceModel.logins());
检查相应的JsFiddle here
希望这能让你走上正轨。