У меня есть решение своей задачи, по логике она должна удовлетворить и ваши потребности.
Однако принцип работы в отличии от предложенного в вашем примере, совершенно иной.
По условию задачи у меня есть форма, внутри формы есть гриды и dataview и мне их надо как то заполнять.
Решение реализовал на основании ассоциаций,
Суть в том что,главная модель имеет ассоциации hasMone с другими моделями. Ассоциированные hasmony модели, как известно хранятся в сторе, вот этот сторе я и передаю гриду. В примере заполняются два грида, но я могу сделать 50 ассоциаций и заполнить 50 гридов, или комбобоксов, или чёнидь ещё. И всё это собственно произойдёт одним запросом. С сохранением кстатии тоже нет проблем, я его так же могу производить одним запросом .
Вот Упрощённая демка, на которой я ставил эксперементы. Здесь к примеру я заполнил два грида.
Рабочий пример во вложении.
Ext.require([
'Ext.data.*',
'Ext.panel.Panel',
]);
Ext.onReady(function() {
//модель для первого грида
Ext.define('Group2', {
extend: 'Ext.data.Model',
fields: ['id', 'parent_id', 'name'],
});
//модель для второго грида
Ext.define('Group3', {
extend: 'Ext.data.Model',
fields: ['id', 'parent_id', 'name'],
});
// главная модель,
Ext.define('Group', {
extend: 'Ext.data.Model',
// у меня здесь данные для полей в форме, но в данном примере они не нужны
fields: ['id', 'parent_id', 'name'],
proxy: {
type: 'ajax',
url: 'data.json',
reader: {
type: 'json',
root: 'groups'
}
},
associations: [{
//ассоциация сформирует сторе для 1го грида
type: 'hasMany',
model: 'Group2',
primaryKey: 'id',
foreignKey: 'parent_id',
associationKey: 'child_groups' // read child data from child_groups
},{
//ассоциация сформирует сторе для 2го грида
type: 'hasMany',
model: 'Group3',
primaryKey: 'id',
foreignKey: 'parent_id',
associationKey: 'child_groups2' // read child data from child_groups
}]
});
//=======================================================================//
Group.load(2,{
success: function(group){
//выведем всю модель в консоль, чтобы её можно было поизучать
console.log(group);
group.group2s().each(function(rec){
console.log(rec.get('name'));
});
Ext.create('Ext.grid.Panel', {
title: 'Users',
store: group.group2sStore,
columns: [
{ header: 'id', dataIndex: 'id' },
{ header: 'name', dataIndex: 'name' }
],
height: 200,
width: 400,
renderTo: Ext.getBody()
});
Ext.create('Ext.grid.Panel', {
title: 'Users',
store: group.group3sStore,
columns: [
{ header: 'id', dataIndex: 'id' },
{ header: 'name', dataIndex: 'name' }
],
height: 200,
width: 400,
renderTo: Ext.getBody()
});
}
});
});
//образец данных
{
"success":true,
"groups": {
"id": 10,
"parent_id": 100,
"name": "Main Group",
"parent_group": {
"id": 100,
"parent_id": null,
"name": "Parent Group"
},
"child_groups": [
{
"id": 2,
"parent_id": 10,
"name": "Child Group 1"
},{
"id": 3,
"parent_id": 10,
"name": "Child Group 2"
},{
"id": 4,
"parent_id": 10,
"name": "Child Group 3"
}
],
"child_groups2": [
{
"id": 2,
"parent_id": 10,
"name": "Child Group 111"
},{
"id": 3,
"parent_id": 10,
"name": "Child Group 2222"
},{
"id": 4,
"parent_id": 10,
"name": "Child Group 3333"
}
]
}
}