我在轨道上使用带有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,但它从商店中删除而不是从数据库中删除。我希望从数据库中删除记录...
感谢...
答案 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. */ }
当您向网格添加新记录时,可能不会填充所有列。 在填充所有必填列之前,商店不会生成服务器创建请求。然后,如果删除未保存的记录,则商店将不会生成销毁请求,因为它将假定该记录“不存在”。