【问题标题】:Sencha Touch: clone recordSencha Touch:克隆记录
【发布时间】:2015-04-23 17:12:29
【问题描述】:

我想克隆一个 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 文档?

【问题讨论】:

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


    【解决方案1】:

    record.copy(id) 如果您传递与记录相同的 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()
    

    【讨论】:

    • 只要在模型上设置了useCache:truerecord.copy(record.getId()); 就不起作用。只要我设置useCache:false,它就会起作用。
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多