Я изо всех сил пытался понять, как использовать hasMany и принадлежит для довольно когда-нибудь. Мое понимание hasMany - это соотношение 1: много и принадлежит. Это много: 1 отношение - в сторону:, так ли это означает, что если у вас есть отношения hasMany, то требуется принадлежность к его дочерней модели? Я прочитал несколько статей по этому вопросу:ExtJS 4: Понимание hasMany и принадлежит
- Загрузка вложенных данных на страницу 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
Еще немного запутался, хотя. Скажем, у меня есть следующие данные:
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": [{}]
}]
}
};
Я хотел бы создать модель для конфигурации:
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'
}
}
});
Так Config может иметь много Someconfigs, потому что в данных, someconfig представляет собой массив объектов. Вот модель Someconfig:
Ext.define('Someconfig', {
extend: 'Ext.data.Model',
fields: [
'name'
],
hasMany: [{
name: 'tabs',
model: 'Tabs',
associationKey: 'tabs'
}]
});
Хорошо, это же сделка. Someconfig может иметь много вкладок, потому что в данных вкладки представляют собой массив объектов. Вот модель табуляции:
Ext.define('Tabs', {
extend: 'Ext.data.Model',
fields: [
'id',
'name',
'layout'
],
belongsTo: [{
name: 'tabs',
model: 'Someconfig',
associationKey: 'tabs'
}]
});
Теперь, принадлежитТо есть, потому что я возился с этим свойством. Несмотря на это, я не могу получить доступ к вкладкам из Someconfig, но я могу получить доступ к Someconfig из Config. Посмотрите на этот код:
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
То, что я хочу знать, я не должен быть в состоянии получить доступ вкладки() из someconfig(), или я не понимаю отношения? Если это первый, как я могу исправить свой код?
Перекресток с Sencha forums.
Yup. Вы совершенно правы, и это те выводы, которые я пришел вчера после того, как поиграл с ним еще немного. Благодаря! – incutonez
Так что интересно об этом, 'someconfig' не отображается в данных' record' ... Я могу получить доступ только к 'someconfig', вызвав его метод. Для меня это не имеет смысла ... если модель 'config' hasMany' someconfig', она должна отображаться в 'config' как массив моделей! – incutonez