我正在尝试学习如何在管理应用程序中的表格上使用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
})
});
Run Code Online (Sandbox Code Playgroud)
这绑定到网格,我可以毫无问题地加载和保存用户.保存按钮如下所示:
var saveButton = new Ext.Button({
text: 'Save',
disabled: true,
handler: function() {
userDataStore.save();
pageState.ClearDirty();
saveButton.disable();
}
});
Run Code Online (Sandbox Code Playgroud)
但是,在创建新用户时,用户的JSON POST将发布到与"更新"相同的REST服务端点,唯一的区别是没有发布ID值(因为只在加载时设置了一个ID)从服务器).
这有效,我可以创建用户.
保存REST服务使用新的数据库ID发回创建的行,我假设EXTJS会自动将新生成的数据库ID绑定到该行.这允许用户进一步编辑该行,并导致更新而不是插入.
相反,该行继续具有空白用户ID,因此额外保存会创建另一个新用户.
所以要么:
我一直在关注EXTJS文档和论坛,但我不清楚正确的方法.
有人可以澄清吗?
编辑:我尝试在JSON中返回Success = True以匹配SuccessProperty,但是这似乎仍然没有用.
编辑#2:到目前为止,我发现唯一有效的方法就是在保存后执行"userDataStore.reload()",但是由于我在保存后将商店的内容返回,我希望EXTJS能理解这一点,更新行值.