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