我正在尝试学习如何在管理应用中的表格上使用EXTJS网格进行一些简单的CRUD操作。
我有一个简单的网格,允许有人编辑用户,商店定义为:
var userDataStore = new Ext.data.Store({
id: 'userDataStore',
autoSave: false,
batch: true,
proxy: new Ext.data.HttpProxy({
api: {
read: '/Admin/Users/All',
create: '/Admin/Users/Save',
update: '/Admin/Users/Save'
}
}),
reader: new Ext.data.JsonReader(
{
root: 'Data',
idProperty: 'ID',
totalProperty: 'total',
successProperty: 'success',
messageProperty: 'message'
}, [
{ name: 'ID', type: 'string', allowBlanks: false },
{ name: 'NT_ID', type: 'string', allowBlank: false },
{ name: 'EMail', type: 'string', allowBlank: false },
{ name: 'Name', type: 'string', allowBlank: false },
{ name: 'Enabled', type: 'bool', allowBlank: false },
{ name: 'CurrentRoleCode', type: 'string', allowBlank: false}]
),
writer: new Ext.data.JsonWriter(
{
encode: false,
writeAllFields: true,
listful: true
})
});
这绑定到网格,我可以毫无问题地加载和保存用户。保存按钮如下所示:
var saveButton = new Ext.Button({
text: 'Save',
disabled: true,
handler: function() {
userDataStore.save();
pageState.ClearDirty();
saveButton.disable();
}
});
但是,在创建新用户时,用户的JSON POST将发布到与“更新”相同的REST服务端点,唯一的区别是没有发布ID值(因为只有一个设置在从服务器加载时存储。)
这很有效,我可以创建用户。
save REST服务使用新的数据库ID发回创建的行,我假设EXTJS会自动将新生成的数据库ID绑定到该行。这允许用户进一步编辑该行,并导致更新而不是插入。
相反,该行继续具有空白用户ID,因此额外保存会创建另一个新用户。
所以:
我一直在关注EXTJS文档和论坛,但我不清楚正确的方法。
有人可以澄清吗?
编辑:我尝试在JSON中返回Success = True以匹配SuccessProperty,但是这似乎仍然不起作用。
编辑#2:到目前为止,我发现保存的唯一功能就是“userDataStore.reload()”,但是因为我在保存后又回来了商店的内容,我希望EXTJS会了解并更新行值。答案 0 :(得分:2)
I've got an idea that may help you. Let't suppose that user added a new record in grid, in that moment add a new property newRecOrderNo to the record to identify the record after response. When user will post data to server after inserting you must get a new ID and associate it to newRecOrderNo (like Map<Integer,Integer>). Then return json object like that : { success : true, newIdes : { 1 : 23, 2 : 34 } } Then when you get response do set proper IDs to records: userDataStore.each(function(rec){ if(rec.data.newRecOrderNo){ rec.data.ID = response.newIdes[rec.data.newRecOrderNo]; delete rec.data.newRedOrderNo; } }) })
答案 1 :(得分:1)
是的,它设置id(以及其他字段,如果服务器返回它们的修改值),如果 create ajax后端返回带有set id的记录,至少在extjs 4.1中。您应该在&quot; root&#39;下返回已设置ID的插入记录。 key作为json字典,在这个例子中,root是&#39; Data&#39;,即:
{
"Data": {
"ID": 8932,
"NT_ID": 28738273,
...
"CurrentRoleCode": "aaa",
},
"success": true
}
答案 2 :(得分:-1)
您需要在savebtn处理程序中使用新参数重新加载存储 喜欢 store.reload();
当然你可以添加更多参数加载动作