EXTJS +保存网格后使用数据库ID更新商店

Fly*_*wat 9 javascript extjs

我正在尝试学习如何在管理应用程序中的表格上使用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应该自动解决生成的行ID,我只是做错了.
  • 我应该在每次保存后使用额外的REST调用手动重新加载网格.

我一直在关注EXTJS文档和论坛,但我不清楚正确的方法.

有人可以澄清吗?

编辑:我尝试在JSON中返回Success = True以匹配SuccessProperty,但是这似乎仍然没有用.

编辑#2:到目前为止,我发现唯一有效的方法就是在保存后执行"userDataStore.reload()",但是由于我在保存后将商店的内容返回,我希望EXTJS能理解这一点,更新行值.

Vai*_*nis -1

您需要在 savebtn 处理程序中使用新参数重新加载存储,例如 store.reload();

当然你可以添加更多参数来加载动作