我想克隆 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
所以,当我修改“副本”时,我也修改了原始副本,这意味着没有创建副本。
我做错了什么,我在哪里误读了 Sencha Touch 文档?
最佳答案
如果您传递与记录相同的 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()
关于javascript - Sencha 触摸 : clone record,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29778077/