时间:2011-04-18 12:29:46

标签: extjs extjs3

我在轨道上使用带有ruby的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,但它从商店中删除而不是从数据库中删除。我希望从数据库中删除记录...

感谢...

1 个答案:

答案 0 :(得分: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 ”属性? 商店配置对象应具有代理 writer 属性,以便在删除时生成正确的服务器请求。

要为商店指定编写器,您可以简单地编写(对于常见的Json编写器):

writer: new Ext.data.JsonWriter()

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

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

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

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