Несколько 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, время: 18:09. |