我有一个可编辑的网格,商店和一个按钮。 该按钮有一个处理程序,可以复制所选记录并将副本添加到商店:
var a = gridPanel.getSelectionModel().getSelectedCell();
var rec = store.getAt(a[0]).copy();
store.addSorted(rec);
alert (store.getAt(1).get('date'));
但是商店和网格没有更新。警报有错误 - 无法调用未定义的方法。
这里有什么问题?
答案 0 :(得分:1)
问题可能是复制的记录具有相同的ID,因此当您将其插入商店时,已存在具有相同ID的另一条记录。
如果在将复制的记录添加到商店之前生成并应用新的ID,它应该可以正常工作。以下代码在作为参数传递的记录中生成新ID。查看Ext.data.Record.copy。
的文档Ext.data.Record.id(rec);
答案 1 :(得分:0)
大多数JavaScript开发人员应该做的事情很少:
使用firebug,如果你打开所有错误的中断,它可能会显示store.get(1)返回undefing并在你尝试调用未定义的函数时导致错误。
现在你有了firebug在window.alert()上使用console.log()语句。使用console.log,你可以实际看到它的检查,它也适用于异步的东西和鼠标事件。
至于你的问题: 调用record.copy()然后将其插入存储将导致问题,如果你不给它一个id。如果你有萤火虫并查看代码,你会偶然发现:
if(this.containsKey(key)){
this.suspendEvents();
this.removeKey(key);
this.resumeEvents();
}
要使用唯一键生成记录,您可以执行以下操作:
var rec = store.getAt(a[0]).copy();
var id = Ext.data.Record.id(id);
rec.id = id;
代码似乎很乱,但没有很多很好的方法。如果是我,我会覆盖复制函数,取一个布尔值来强制记录的id自动生成。