Несколько 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, многое не понимаю полностью, поэтому и спрашиваю совета. |
как вы сказали: из за нескольких гридов.. скорей всего да, идет смешение.
я так понимаю это часть кода?? так сложно что то сказать.. попробуйте расставить логи (console.log(parameter); ). и смотрите что он выдает и что должно быть.. может найдете с какого места идет сбой |
У гридов один и тот же store?
|
Если один и тот же стор то проблемно.
Какие именно траблы, уточни? Сам сейчас пытаюсь использовать один стор для закладок с гридами. |
Спасибо всем за участие.
Дело было в том, что использовал Viewport. Из документации узнал, что Viewport может быть только один на странице. А загвоздка возникала в том, что не работало удаление, несмотря на то, что store были разные, и при добавлении позиции не обновлялся список в grid. То есть здесь
deleteNews: function(button) {
var grid = this.getLineGrid(),
record = grid.getSelectionModel().getSelection(),
store = this.getLineStore();
store.remove(record);
this.getLineStore().sync();
this.getLineStore().load();
}
не определяется из которого именно grid'а должна быть удалена позиция. Искал в документации, но не нашёл способа обратиться к разным grid'ам, если на странице их несколько в одном Viewport'е. Спасибо. |
в гриде пишется id'шник и потом к нему можно обратится:
var grid = Ext.getCmp('idGrid'); также можно в массив список гридов запхнуть, если надо перебрать циклом.. |
skrudjmakdak,
спасибо за совет. Весьма полезен. |
| Часовой пояс GMT +3, время: 14:01. |