0

我正在使用带有 ruby​​ on rails 的 ext js 设计器。我想在按钮单击事件中从我的网格和数据库中删除一条记录。谁能帮我?谢谢...

以下是我的网格的代码。

            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 被删除,但它是从存储中删除的,而不是从数据库中删除的。我也希望从数据库中删除记录...

谢谢...

4

1 回答 1

1

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

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 ”属性?存储配置对象应具有代理写入器属性,以便在删除时生成正确的服务器请求。

要为商店指定作家,您可以简单地编写(对于普通的 Json 作家):

writer: new Ext.data.JsonWriter()

并且存储会将所有适当的写入请求发送到服务器。

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

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

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

于 2011-04-22T10:47:36.980 回答