inc*_*nez 5 model has-many belongs-to extjs4 extjs4.2
我一直在努力了解如何使用hasMany和belongsTo很长一段时间.我的理解是hasMany是1:很多关系而且属于多个:1关系 - 除此之外:那么这意味着如果你有一个hasMany关系,在其子模型中需要belongsTo吗?我已经阅读了几篇文章:
虽然有点困惑.假设我有以下数据:
var data = {
"config": {
"name": "blah",
"id": 1,
"someconfig": [{
"name": "Services", "tabs": [{
"id": 0, "name": "Details", "layout": "hbox"
}, {
"id": 1, "name": "Sources", "layout": "hbox"
}, {
"id": 2, "name": "Paths", "layout": "hbox"
}, {
"id": 3, "name": "Ports", "layout": "hbox"
}, {
"id": 4, "name": "Levels", "layout": "hbox"
}, {
"id": 5, "name": "Notes", "layout": "hbox"
}]
}, {
"name": "Services2", "tabs": [{}]
}]
}
};
Run Code Online (Sandbox Code Playgroud)
我会为配置创建一个模型:
Ext.define('Config', {
extend: 'Ext.data.Model',
fields: ['name'],
hasMany: [{
name: 'someconfig',
model: 'Someconfig',
associationKey: 'someconfig'
}],
proxy: {
type: 'memory',
data: data,
reader: {
type: 'json',
root: 'config'
}
}
});
Run Code Online (Sandbox Code Playgroud)
因此Config可以有许多Someconfigs,因为在数据中,someconfig是一个对象数组.这是Someconfig模型:
Ext.define('Someconfig', {
extend: 'Ext.data.Model',
fields: [
'name'
],
hasMany: [{
name: 'tabs',
model: 'Tabs',
associationKey: 'tabs'
}]
});
Run Code Online (Sandbox Code Playgroud)
好的,同样的交易.Someconfig可以有很多Tabs,因为在数据中,tabs是一个对象数组.这是Tabs模型:
Ext.define('Tabs', {
extend: 'Ext.data.Model',
fields: [
'id',
'name',
'layout'
],
belongsTo: [{
name: 'tabs',
model: 'Someconfig',
associationKey: 'tabs'
}]
});
Run Code Online (Sandbox Code Playgroud)
现在,belongsTo在那里,因为我正在搞乱这个属性.无论如何,我无法从Someconfig访问Tabs,但我可以从Config访问Someconfig.看看这段代码:
Config.load(1, {
success: function(record, operation) {
console.log(record.get('name')); // works
console.log(record.someconfig().getCount()); // works, gives me 2
console.log(record.someconfig().data.items[0].data); // only prints out name and config_id
// console.log(record.someconfig().tabs()); // doesn't exist
}
});
Run Code Online (Sandbox Code Playgroud)
jsFiddle:演示
我想知道的是,我不应该从someconfig()访问tabs (),还是我误解了这些关系?如果是前者,我将如何修复我的代码?
来自Sencha论坛的交叉发布.
小智 5
你的方法有一些问题:
Run Code Online (Sandbox Code Playgroud)someconfig = record.someconfig().getAt(0); sometab = someconfig.tabs().getAt(0);
| 归档时间: |
|
| 查看次数: |
8393 次 |
| 最近记录: |