【发布时间】:2010-09-14 05:36:57
【问题描述】:
我正在尝试学习如何使用 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 值(因为只有在从服务器加载时存储)。
这行得通,我可以创建用户。
保存 REST 服务会使用新的数据库 ID 发回创建的行,我假设 EXTJS 会自动将新生成的数据库 ID 绑定到该行。这允许用户进一步编辑该行,并导致更新而不是插入。
相反,该行仍然有一个空白用户 ID,因此额外的保存会创建另一个新用户。
所以要么:
- EXTJS 应该自动解析生成的行 ID,我只是做错了。
- 我应该在每次保存后通过额外的 REST 调用手动重新加载网格。
我一直在查看 EXTJS 文档和论坛,但我不清楚正确的方法。
有人可以澄清一下吗?
编辑:我尝试在 JSON 中返回 Success = True 以匹配 SuccessProperty,但这似乎仍然不起作用。
编辑#2:到目前为止,我发现唯一可行的方法是在保存后执行“userDataStore.reload()”,但是因为我在保存后返回了商店的内容,所以我希望 EXTJS 会理解这一点并更新行值。
【问题讨论】:
标签: javascript extjs