带同步的行编辑网格
rowedit grid with sync
我尝试实现像 this example 这样的通用行编辑网格,不同之处在于我想将更改与服务器后端同步。到现在为止,我可以使用 onRoweditAdd
添加一个新行。
Ext.define('Mb.view.base.RoweditListController', {
extend: 'Ext.app.ViewController',
alias: 'controller.roweditlist',
onRoweditAdd: function(me){
var grid = me.up('panel'),
edit = grid.editingPlugin,
store = grid.getStore(),
record = store.getModel().create({id: 0});
edit.cancelEdit()
store.insert(0, record)
edit.startEdit(record, 0)
},
editRowedit: function(editor, ctx) {
var store = ctx.grid.getStore();
store.sync()
}
})
问题是 store.sync()
没有向服务器发送 create
请求,而是 update
请求。看起来 store.insert(0, record)
没有计算在内。只有用户所做的修改才会同步。罪魁祸首是什么?
不幸的是,我无法创建重现该问题的fiddle。
我通过更改这一行解决了它:
record = store.getModel().create({id: 0});
至
record = store.getModel().create({});
问题与自 ExtJs 5 以来记录 ID 的新实现有关。但我无法解释...
ExtJs 6 不再支持使用 id: 0
创建新记录。
通过在记录中提供现有的 id
,ExtJS 假定该记录已存在于您的商店中并且必须更新。如果您不提供 id,那么它会认为这是一条新创建的记录,并且会走创建路线。这是基于您使用生成的 ID 策略(您通常应该这样做)的假设,因此您永远不会在创建时自己提供 ID。
在幕后,ExtJS 将记录标记为幻影:true 或 false。幻影记录是那些只存在于前端,还没有被持久化的记录。创建没有 id
的记录会将其标记为幻影,而创建具有已提供 ID 的记录不会将其标记为幻影并且不会触发创建调用,而是触发更新
我发现在Ext.data.Model
中idProperty
被用作识别记录的唯一键。默认情况下,它有 id
字段集。如果您提供副本,那么它将在 store
.
中引起问题
ExtJS 文档中已经写了这个描述
The data values for this field must be unique or there will be id value collisions in the Ext.data.Store.
Defaults to:
'id'
请参考link
我尝试实现像 this example 这样的通用行编辑网格,不同之处在于我想将更改与服务器后端同步。到现在为止,我可以使用 onRoweditAdd
添加一个新行。
Ext.define('Mb.view.base.RoweditListController', {
extend: 'Ext.app.ViewController',
alias: 'controller.roweditlist',
onRoweditAdd: function(me){
var grid = me.up('panel'),
edit = grid.editingPlugin,
store = grid.getStore(),
record = store.getModel().create({id: 0});
edit.cancelEdit()
store.insert(0, record)
edit.startEdit(record, 0)
},
editRowedit: function(editor, ctx) {
var store = ctx.grid.getStore();
store.sync()
}
})
问题是 store.sync()
没有向服务器发送 create
请求,而是 update
请求。看起来 store.insert(0, record)
没有计算在内。只有用户所做的修改才会同步。罪魁祸首是什么?
不幸的是,我无法创建重现该问题的fiddle。
我通过更改这一行解决了它:
record = store.getModel().create({id: 0});
至
record = store.getModel().create({});
问题与自 ExtJs 5 以来记录 ID 的新实现有关。但我无法解释...
ExtJs 6 不再支持使用 id: 0
创建新记录。
通过在记录中提供现有的 id
,ExtJS 假定该记录已存在于您的商店中并且必须更新。如果您不提供 id,那么它会认为这是一条新创建的记录,并且会走创建路线。这是基于您使用生成的 ID 策略(您通常应该这样做)的假设,因此您永远不会在创建时自己提供 ID。
在幕后,ExtJS 将记录标记为幻影:true 或 false。幻影记录是那些只存在于前端,还没有被持久化的记录。创建没有 id
的记录会将其标记为幻影,而创建具有已提供 ID 的记录不会将其标记为幻影并且不会触发创建调用,而是触发更新
我发现在Ext.data.Model
中idProperty
被用作识别记录的唯一键。默认情况下,它有 id
字段集。如果您提供副本,那么它将在 store
.
ExtJS 文档中已经写了这个描述
The data values for this field must be unique or there will be id value collisions in the Ext.data.Store.
Defaults to:
'id'
请参考link