Показать сообщение отдельно
  #1 (permalink)  
Старый 12.04.2013, 09:38
Новичок на форуме
Отправить личное сообщение для A.V. Посмотреть профиль Найти все сообщения от A.V.
 
Регистрация: 31.01.2012
Сообщений: 3

Несколько Grid-панелей на странице
Привет всем.
Пишу на ExtJS 4 (+ PHP, MySQL) систему управления данными. Основное - Grid-панель. Реализовал все CRUD-операции.
Проблема в следующем: когда добавляешь ещё одну Grid-панель (либо сбоку - в обычной панели, либо в одном из смежных tab'ов) CRUD-операции панель перестаёт корректно работать. Как я понял - это из-за того, что две или более Grid-панели на странице.
Искал в документации методы для обращения к выбранному хранилищу, ничего не нашёл. Гугл тоже ответов не даёт.
Прошу помощи: подскажите, можно ли решить проблему - реализовать CRUD-операции с несколькими панелями? Стоит ли вообще так делать? И если нет, то есть ли какая-либо альтернатива?

Приведу код контроллера:
Ext.define('SM.controller.Line', {
    extend: 'Ext.app.Controller',

    stores: ['Line'],

    models: ['Line'],

    views: ['line.Line', 'line.Grid'],

    refs: [{
            ref: 'linePanel',
            selector: 'panel'
        },{
            ref: 'lineGrid',
            selector: 'grid'
        }
    ],

    init: function() {
        this.control({
            'linegrid dataview': {
                itemdblclick: this.addLine
            },
            'linegrid button[action=add]': {
            	click: this.addLine
            },
            'linegrid button[action=delete]': {
                click: this.deleteLine
            },
            'lineform button[action=save]': {
                click: this.updateLine
            }
        });
    },

    addLine: function(grid, record) {
        var edit = Ext.create('SM.view.line.Line').show();

        if(record){
        	edit.down('form').loadRecord(record);
        }
    },
    
    updateLine: function(button) {
        var win    = button.up('window'),
            form   = win.down('form'),
            record = form.getRecord(),
            values = form.getValues();
        
        var novo = false;
        
		if (values.id > 0){
			record.set(values);
		} else{
			record = Ext.create('SM.model.Line');
			record.set(values);
			this.getLineStore().add(record);
            novo = true;
		}
        
		win.close();
        this.getLineStore().sync();

        if (novo){ 
            this.getLineStore().load();
        }
    },
    
    deleteLine: function(button) {
    	
    	var grid = this.getLineGrid(),
    	record = grid.getSelectionModel().getSelection(), 
        store = this.getLineStore();

	    store.remove(record);
	    this.getLineStore().sync();

        this.getLineStore().load();
    }
});


Кстати, обращение getStore('Line') аналогично ли getLineStore()?

Заранее спасибо за помощь.

P.S. только начинаю разбираться с ExtJS, многое не понимаю полностью, поэтому и спрашиваю совета.

Последний раз редактировалось A.V., 15.04.2013 в 09:37.
Ответить с цитированием