Sencha Touch:克隆记录

时间:2015-04-21 16:30:38

标签: javascript extjs sencha-touch sencha-touch-2

我想克隆一个Sencha Touch 2.3模型实例(也称为"记录")。克隆应具有与旧克隆相同的ID,但不应将其附加到任何商店。在ExtJS4中,我会执行以下操作,它可以工作:

var newRecord = record.copy();

这在Sencha Touch中不起作用。根据ST2文档,新记录在copy()上获得新生成的ID。所以我试过了:

var newRecord = record.copy(record.getId());

所以现在我应该有一个具有相同ID的新副本。

newRecord.getId()==record.getId(); // returns true
然后我修改了记录:

newRecord.set("myCount",newRecord.get("myCount")+1);

猜猜接下来会发生什么?我检查记录是否真的不同:

newRecord.get("myCount")!=record.get("myCount"); // returns false

所以,当我修改" copy"时,我也修改了原文,这意味着没有创建副本。

我做错了什么,我在哪里误读了Sencha Touch文档?

1 个答案:

答案 0 :(得分:2)

如果传递与记录相同的id,

record.copy(id)将返回对现有记录的引用。

var newRecord = record.copy()将创建另一个记录实例,因此它将具有不同的ID,但它没有附加到当前存储。您可以如下所示验证:

record.stores  //Returns store reference in array
newRecord.stores //Returns [] indicating no store refeerences

如果您愿意,可以复制记录并将newRecord的ID设置为原始记录的ID。

var newRecord = record.copy()
newRecord .set('id',record.getId()) //newRecord.getId() returns same as record.getId()