Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Editable grid вместе с JSONStore, Не могу правильно наладить CRUD 
:(
    Опции темы
TerminalSoul
Дата 16.2.2011, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 24.9.2009

Репутация: нет
Всего: 1



Вобщем собственно проблема следующая. Решил заняться изучением ExtJS. И сейчас задача - создать редактируемую таблицу, которая бы работала вместе с jsonstore. Всё вроде бы заработало и update пашет и загрузка. Проблемы начались, когда я попытался реалтизовать операцию создания нового элемента. Дело в том, что в таблице БД есть автоинкрементный счётик, по которому происходит идентификация элемента. Создавая запись в grid, я его значение не знаю, но заполняю строку дефолтными значениями. Затем автоматически(не знаю где эта опция) идёт запрос к скрипту. Вот тут-то и проблема, я не понимаю и не смог найти как должен выглядеть ответ на операцию записи, чтобы запись в grid обновилась, после того как элемент записан в БД.
вот код:
Код

$(document).ready(function() {
    var view = new Ext.Viewport({
    layout: 'border',
    items: [{
        region: 'west',
        collapsible: true,
        title: 'Navigation',
        xtype: 'treepanel',
        width: 200,
        autoScroll: true,
        split: true,
        loader: new Ext.tree.TreeLoader(),
        root: new Ext.tree.AsyncTreeNode({
            expanded: true,
            children: [{
                    text: 'Каталог',
                    id: 'catalog',
                    loader: new Ext.tree.TreeLoader({baseParams: {ajax: true}, dataUrl: '/catalog/admin/getGroups'})
                }, {
                    text: 'События',
                    id: 'events',
                }, {
                    text: 'Выставки',
                    id: 'exeb',
                }]
        }),
        rootVisible: false,
        listeners: {
            click: function(n) {
                if(n.leaf) {
                    var tab = view.getComponent('elements').add({
                        id: n.attributes.id,
                        title: n.attributes.text,
                        closable: true,
                        xtype: 'editorgrid',
                        cm: cms.catalogElement,
                        store: stores.catalogElement(n.attributes.id.substr(5)),
                        header: true,
                        tbar: [{
                            text: 'Добавить',
                            handler: function() {
                                var el = tab.getStore().recordType;
                                var r = new el({
                                    name: 'Продукт 1',
                                    year: 2010,
                                    description: "",
                                    author: ""
                                });
                                tab.stopEditing();
                                tab.getStore().insert(0, r);
                                tab.startEditing(0, 0);
                            }
                        }],
                        listeners: {
                        }
                    });    
                    tab.getStore().load();
                    view.getComponent('elements').activate(tab);
                }
            }
        }
    }, {
        region: 'center',
        xtype: 'tabpanel',
        itemId: 'elements'
    }]
});
});

var stores = {
    catalogElement: function(groupId) {
        return new Ext.data.JsonStore({
        autoDestroy: true,
        url: '/catalog/admin/getElements',
        idProperty: 'catalogId',
        root: 'root',
        baseParams: {groupId: groupId},
        fields: ['name', 'year', 'description', 'author', 'catalogId'],
        'writer': new Ext.data.JsonWriter({writeAllFields: false}),
        listeners: {
            save: function() {
                //this.commitChanges();
            },
            update: function(n, rec) {
                ;
            }
        }
        })
    }
}

var cms = {
    catalogElement: new Ext.grid.ColumnModel({
        columns: [{
            id: 'id',
            header: 'ID',
            dataIndex: 'catalogId',
            width: 20,
        },{
            id: 'name',
            header: 'Название',
            dataIndex: 'name',
            width: 220,
            editor: new Ext.form.TextField({
                allowBlank: false
            })
        },{
            id: 'year',
            header: 'Год выпуска',
            dataIndex: 'year',
            width: 220,
            editor: new Ext.form.TextField({
                allowBlank: false
            })
        },{
            id: 'descr',
            header: 'Описание',
            dataIndex: 'description',
            width: 220,
            editor: new Ext.form.TextField({
                allowBlank: true
            })
        },{
            id: 'auth',
            header: 'Автор',
            dataIndex: 'author',
            width: 220,
            editor: new Ext.form.TextField({
                allowBlank: true
            })
        }]
    })
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.