小编Dan*_*jan的帖子

深度克隆Backbone.js模型

我正在使用backbone.js在jquery中工作并遇到需要复制模型的情况,但我需要对它们进行深层复制,因此副本之间不存在引用.模型可以将其他模型作为属性.模型可以将anon函数作为属性.

所以我正在努力创建一种能够深度克隆大多数骨干模型的算法.我希望在这个副本期间应该删除所有绑定(对于新实例),所以我不担心试图保留它们.

目标:

  • 能够复制所有简单变量(String,Int,float等)并将其存储到新模型中,作为相同的名称.
    • 完成后,使用toJSON创建一个可以传递给set()的新JSON对象.此对象仅包含简单属性,即不包括分配给函数或其他模型的属性.
  • 能够复制anon函数,一些变量将被分配给,而不事先知道函数/属性名称.
    • 如果我知道分配给函数的属性的名称,我可以复制它.但如果模型是新的或未知的,我没有那些信息.
  • 如果属性是另一个主干模型,则在该属性上递归调用深层复制算法.
    • 无法检查属性是否是具有本机骨干方法的骨干模型,正在寻找解决方法.

我目前拥有的简化版本如下:

/**
 * Performs a deep copy of a backbone.js model
 * All bindings for the copy are lost
 * @param orgModel - the original model to copy
 */
function deepCopyModel(orgModel)
{   
    var dupModel = Backbone.Model.extend({});

    var orgAttributes= orgModel.toJSON();

    var keepAttr=_.keys(orgAttributes);
    //remove any special cases
    keepAttr=_.without( keepAttr , 'specialCase1', 'specialCase2' );
    //or keepAttr=_.difference(keepAttr, ['specialCase1', 'specialCase2'] );

    //remove undefined values
    keepAttr=_.filter(keepAttr,function(key) {
        return ( typeof(attributes[key])!="undefined" );
    });
    //grab the resulting list of …

javascript jquery jquery-mobile backbone.js

8
推荐指数
1
解决办法
1万
查看次数

Backbone:合并模型但保留数据绑定

现在我有很多绑定到主干模型的UI元素.此模型包含客户信息,每次搜索新客户时都会更改模型,然后将其引入焦点.以前的客户模型被这个新模型覆盖.如果不是所有字段中的大多数字段都是相同的名称,则某些数组可能具有更多或更少的元素,但总体上几乎相同.

有没有办法可以用新的模型信息覆盖旧的模型信息,但保留我的UI元素的所有绑定?

jquery jquery-mobile backbone.js

3
推荐指数
1
解决办法
2330
查看次数

标签 统计

backbone.js ×2

jquery ×2

jquery-mobile ×2

javascript ×1