Tôi đã đấu tranh để hiểu làm thế nào để sử dụng hasMany và thuộc về cho đôi khi khá. Sự hiểu biết của tôi là hasMany là mối quan hệ 1: nhiều và thuộcTo là một mối quan hệ nhiều: 1 - sang một bên: Vậy điều đó có nghĩa là nếu bạn có mối quan hệ hasMany, thì thuộc tính là cần thiết trong mô hình con của nó? Tôi đã đọc một số bài viết về nó:ExtJS 4: Hiểu hasMany và thuộc về
- Tải dữ liệu lồng nhau trên trang Ext.data.reader.Reader.
- Ext.data.association.BelongsTo
- Ext.data.association.HasMany
- Association Sample in extjs 4.2:
- ExtJS Tutorials - HasMany article
- ExtJS Tutorials - BelongsTo article
- hasMany vs belongsTo
- ExtJS 4: Models with Associations and Stores
Vẫn còn một chút bối rối mặc dù. Hãy nói rằng tôi có các dữ liệu sau:
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": [{}]
}]
}
};
tôi sẽ tạo ra một mô hình cho cấu hình:
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'
}
}
});
Vì vậy Config có thể có nhiều Someconfigs vì trong dữ liệu, someconfig là một mảng của các đối tượng. Đây là mô hình Someconfig:
Ext.define('Someconfig', {
extend: 'Ext.data.Model',
fields: [
'name'
],
hasMany: [{
name: 'tabs',
model: 'Tabs',
associationKey: 'tabs'
}]
});
Ok, cùng một thỏa thuận. Someconfig có thể có nhiều Tabs vì trong dữ liệu, các tab là một mảng các đối tượng. Đây là mô hình Hợp âm:
Ext.define('Tabs', {
extend: 'Ext.data.Model',
fields: [
'id',
'name',
'layout'
],
belongsTo: [{
name: 'tabs',
model: 'Someconfig',
associationKey: 'tabs'
}]
});
Bây giờ, hãy ở trong đó vì tôi đang bận tâm với tài sản này. Bất kể, tôi không thể truy cập Tabs từ Someconfig, nhưng tôi có thể truy cập Someconfig từ Config. Hãy nhìn vào mã này:
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
}
});
jsFiddle: demo
Những gì tôi muốn biết là, tôi không nên có thể truy cập tab() từ someconfig(), hay tôi hiểu lầm các mối quan hệ? Nếu đó là cũ, làm cách nào để sửa mã của tôi?
Được đăng chéo từ Sencha forums.
Yup. Bạn hoàn toàn đúng, và đó là những kết luận tôi đã đến hôm qua sau khi chơi với nó một số chi tiết. Cảm ơn! – incutonez
Điều thú vị về điều này là, 'someconfig' không hiển thị trong dữ liệu của' record' ... Tôi chỉ có thể truy cập 'someconfig' bằng cách gọi phương thức của nó. Điều này không có ý nghĩa với tôi ... nếu mô hình 'config' cóMany' someconfig', nó sẽ hiển thị trong 'config' như một mảng các mô hình! – incutonez