Показать сообщение отдельно
  #6 (permalink)  
Старый 05.07.2012, 21:39
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

У меня есть решение своей задачи, по логике она должна удовлетворить и ваши потребности.

Однако принцип работы в отличии от предложенного в вашем примере, совершенно иной.
По условию задачи у меня есть форма, внутри формы есть гриды и 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"
	        }
	]
    }
}
Вложения:
Тип файла: zip www.zip (1.2 Кб, 11 просмотров)
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 05.07.2012 в 22:15.
Ответить с цитированием