удаление записи из таблицы и базы данных при событии нажатия кнопки во внешнем js

#extjs #extjs3

#extjs #extjs3

Вопрос:

я использую ext js designer с ruby on rails. я хочу удалить запись из моей сетки и базы данных при событии нажатия кнопки. кто-нибудь может мне помочь? Спасибо…

ниже приведен код моей сетки.

             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. Вы должны включить исходный код вашей сетки в вопрос.

2. У вас настроено средство записи для вашего хранилища? Он должен соответствующим образом обрабатывать просмотр, создание, обновление и удаление при вызове save в хранилище, если настроен правильно.

Ответ №1:

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

 xtype:'grid'
  

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

 xtype:'editorgrid'
  

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

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

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

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

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

 writer: new Ext.data.JsonWriter()
  

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

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

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

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

Комментарии:

1. большое спасибо. но элемент «прокси» grid выдает мне некоторую ошибку. но я решил это с помощью небольшого ajax-кода. var g1 =Ext.getCmp(‘mygrid’); var dataid= g1.getSelectionModel().getSelected().id; Ext.Ajax.request({ url: ‘/products/’ dataid, метод: ‘DELETE’, параметры: {‘data[id]’:dataid} });