将记录添加到商店
问题描述:
我有一个可编辑的网格,商店和一个按钮。 按钮有应该拷贝复制所选记录并添加到存储的处理程序:将记录添加到商店
var a = gridPanel.getSelectionModel().getSelectedCell();
var rec = store.getAt(a[0]).copy();
store.addSorted(rec);
alert (store.getAt(1).get('date'));
但不更新实体店和网格。该警报有一个错误 - 无法调用未定义的方法。
这里有什么问题?
答
问题可能在于,复制的记录具有相同的ID,因此当您将其插入存储区时,具有相同ID的另一个记录已存在。
如果您在将新记录添加到商店之前生成并应用新的ID,它应该可以工作。以下代码在作为参数传递的记录中生成一个新的ID。检查Ext.data.Record.copy的文档。
Ext.data.Record.id(rec);
答
几件事情,大多数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。
谢谢您的建议。我使用铬“检查元素” - 适合我。虽然我不明白为什么,但我知道录音不是插入的。 – lvil