Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ExtJS中单击按钮事件时从网格和数据库中删除记录_Extjs_Extjs3 - Fatal编程技术网

在ExtJS中单击按钮事件时从网格和数据库中删除记录

在ExtJS中单击按钮事件时从网格和数据库中删除记录,extjs,extjs3,Extjs,Extjs3,我正在使用ExtJSDesigner和RubyonRails。 我想在单击按钮事件时从我的网格和数据库中删除一条记录。 有人能帮我吗? 谢谢 以下是我的网格代码 xtype: 'grid', title: 'Products', store: 'productMaster', height: 176, id:'mygrid', name:'mygrid'

我正在使用ExtJSDesigner和RubyonRails。 我想在单击按钮事件时从我的网格和数据库中删除一条记录。 有人能帮我吗? 谢谢

以下是我的网格代码

            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);
                            }
由于这个处理函数,最后一个记录id被删除了,但它是从存储中删除的,而不是从数据库中删除的。我希望记录也从数据库中删除


谢谢…

在我们开始之前:我注意到网格的配置对象

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”属性? store config对象应该有一个proxy和一个writer属性,以便在删除时生成正确的服务器请求

要为存储指定编写器,您只需编写(对于常见的Json编写器):

存储将向服务器发送所有适当的写入请求

另一个痛苦的问题(我认为没有很好的文档记录)可能是商店阅读器中存在必填字段。默认情况下,所有列都是必填的;要将列标记为“非强制性”,必须指定(在存储读取器列数组中):

当您向网格中添加新记录时,可能不会填充所有列。
在填充所有必填列之前,存储不会生成服务器创建请求。然后,如果删除未保存的记录,存储将不会生成销毁请求,因为它将假定该记录“不存在”。

问题中应包括网格的源代码。是否为存储设置了编写器?如果配置正确,在调用存储上的save时,它应该能够适当地处理视图、创建、更新和删除。非常感谢。但是网格的“代理”元素给了我一些错误。但是我已经通过使用一个小的ajax代码解决了这个问题。var g1=Ext.getCmp('mygrid');var dataid=g1.getSelectionModel().getSelected().id;请求({url:'/products/'+dataid,方法:'DELETE',参数:{'data[id]':dataid}});
writer: new Ext.data.JsonWriter()
{name:'column_name', allowBlank:true, /* other stuff like 'type' etc. */ }