我正在使用ExtJS编辑器网格,在某些情况下,当我尝试在行中插入一行时 数据存储网格似乎用新行的副本写下一行。
这是使用ExtJS版本3.2.1
{
xtype: 'button',
text: 'Clone',
handler: function (btn)
{
var data, wizard, store, record, grid = btn.findParentByType('editorgrid');
store = grid.getStore();
if (grid.getSelectionModel().hasSelection())
{
data = grid.getSelectionModel().getSelected().data;
data.iid = -1;
record = new store.recordType(data);
Ext.data.Record.id(record);
store.insert(0,[record]);
grid.getSelectionModel().selectRecords([record], false);
}
}
}
答案 0 :(得分:0)
此处显示的覆盖情况可能是由克隆操作中存在的双重ID引起的。因为您的新克隆记录似乎没有唯一ID。
Ext.data.Record.id(record); // return generated unique string id that you never use
record.id = Ext.data.Record.id(record); // here is the different
试试这个
{
xtype: 'button',
text: 'Clone',
handler: function (btn)
{
var data, wizard, store, record, grid = btn.findParentByType('editorgrid');
store = grid.getStore();
if (grid.getSelectionModel().hasSelection())
{
data = grid.getSelectionModel().getSelected().data;
data.iid = -1;
record = new store.recordType(data);
record.id = Ext.data.Record.id(record); // here is the different
store.insert(0,[record]);
grid.getSelectionModel().selectRecords([record], false);
}
}
}
答案 1 :(得分:0)
这一行
data = grid.getSelectionModel().getSelected().data;
是问题的一部分,两个记录都指向相同的原始数据,我将其更改为复制数据。
答案 2 :(得分:0)
非常感谢,这有助于获得更好的想法来解决复制问题 我们可以用这种方式复制多行 而且非常简单。
var selectedRows = selectedModel.getSelection();
for ( var i = 0; i < selectedRows.length; i++) {
var data = selectedRows[i].data;
data.iid=-1;
store.insert(0,[data]);
}
因此我们已经检查了一个插入网格顶部的记录。