2011-03-01 76 views
0

我有一个可编辑的网格,商店和一个按钮。 按钮有应该拷贝复制所选记录并添加到存储的处理程序:将记录添加到商店

var a = gridPanel.getSelectionModel().getSelectedCell(); 

    var rec = store.getAt(a[0]).copy(); 
    store.addSorted(rec); 
    alert (store.getAt(1).get('date')); 

但不更新实体店和网格。该警报有一个错误 - 无法调用未定义的方法。

这里有什么问题?

回答

1

问题可能在于,复制的记录具有相同的ID,因此当您将其插入存储区时,具有相同ID的另一个记录已存在。

如果您在将新记录添加到商店之前生成并应用新的ID,它应该可以工作。以下代码在作为参数传递的记录中生成一个新的ID。检查Ext.data.Record.copy的文档。

Ext.data.Record.id(rec); 
0

几件事情,大多数JavaScript开发人员应该做的:

  1. 使用Firebug,如果你打开所有的错误决裂它可能会告诉你,store.get(1)将返回undefing和当您尝试调用未定义的函数时导致错误。

  2. 现在你已经有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。

+0

谢谢您的建议。我使用铬“检查元素” - 适合我。虽然我不明白为什么,但我知道录音不是插入的。 – lvil