удалить запись из сетки и базы данных по событию нажатия кнопки в ext js - PullRequest
0 голосов
/ 18 апреля 2011

я использую ext js конструктор с ruby ​​на рельсах.Я хочу удалить запись из моей сетки и базы данных по событию нажатия кнопки.Может кто-нибудь мне помочь?спасибо ...

следующий код моей сетки.

            xtype: 'grid',
            title: 'Products',
            store: 'productMaster',
            height: 176,
            id:'mygrid',
            name:'mygrid',
            sm: new Ext.grid.RowSelectionModel({
                    singleSelect: true,
                    listeners: {
                           rowselect: function(sm, row, rec) {
                           Ext.getCmp("myform").getForm().loadRecord(rec);
                                                              }
                           }
                    }),
            columns: [
                {
                    xtype: 'gridcolumn',
                    dataIndex: 'name',
                    header: 'name',
                    sortable: true,
                    width: 100
                },
                {
                    xtype: 'gridcolumn',
                    dataIndex: 'price',
                    header: 'price',
                    sortable: true,
                    width: 100
                },
                {
                    xtype: 'gridcolumn',
                    dataIndex: 'category',
                    header: 'category',
                    sortable: true,
                    width: 100
                },

и мой код кнопки удаления

             bbar: {
                xtype: 'toolbar',
                height: 30,
                items: [
                    {
                        xtype: 'button',
                        text: 'Delete',
                        width: 100,
                        height: 30,
                        id:'btnDelete',
                        handler: function() {

                                //alert('trying to delete the record...');
                                var store = Ext.getCmp("mygrid").getStore();
                                store.removeAt(store.getCount()-1);
                            }

из-за этой функции обработчикапоследний идентификатор записи удален, но он удален из хранилища, а не из базы данных. Я хочу, чтобы запись также удалялась из базы данных ...

спасибо ...

1 Ответ

1 голос
/ 22 апреля 2011

Перед тем, как мы начнем: я заметил, что объект конфигурации вашей сетки имеет

xtype:'grid'

Это само по себе запрещает любые возможности редактирования и взаимодействия с сервером (кроме чтения хранилища), потому что вы создаете экземпляр Ext.grid.GridPanel , в то время как (я думаю) вам нужен Ext.grid.EditorGridPanel .Чтобы все следующее работало правильно, вы должны изменить эту строку на:

xtype:'editorgrid'

Первое, что я хотел бы проверить, - это то, что хранилище имеет атрибут конфигурации id , и этонастроен столбец магазина ридера.Если хранилище не может идентифицировать запись, оно будет думать, что запись не существует, и не будет генерировать запрос к серверу.

Второе, что нужно проверить: настроено ли ваше хранилище для генерации запросов к серверу?То есть есть ли такая строка в вашем объекте конфигурации магазина?

proxy: new Ext.data.HttpProxy({
    api:{
        read:'readscript.url',
        create:'insertscript.url',
        update:'updatescript.url',
        destroy:'deletescript.url'
    }
})

Далее, вы определили атрибут " writer " в вашем объекте конфигурации магазина?Объект конфигурации хранилища должен иметь атрибут proxy и атрибут writer для генерации правильных запросов к серверу при удалении.

Чтобы указать средство записи для хранилища, вы можете просто написать (для обычного писателя Json):

writer: new Ext.data.JsonWriter()

, и хранилище отправит на сервер все соответствующие запросы на запись.

Еще одной болезненной (я думаю, недостаточно документированной) проблемой может бытьналичие обязательных полей в магазине ридера.Все столбцы являются обязательными по умолчанию;чтобы пометить столбец как «необязательный», необходимо указать (в массиве столбцов устройства чтения магазина):

{name:'column_name', allowBlank:true, /* other stuff like 'type' etc. */ }

Возможно, при добавлении новой записи в сетку не все столбцы будутнаселен.Хранилище не будет генерировать запрос на создание сервера, пока не будут заполнены все обязательные столбцы.Затем, если вы удалите несохраненную запись, хранилище не сгенерирует запрос на уничтожение, поскольку будет считать, что запись «не существует».

...