2017-04-11 42 views
0

我刚开始写一个骨干库,它是这样的,_.extend不浅拷贝元素到目的地正确

(function() { 
    var root = this; 

    if(root && !root.Backbone) { 
     console.log('BackboneJS does not exist!.'); 
    } else { 
     Backbone = root.Backbone; 
    } 

    var Form = Backbone.View.extend({ 
     events: { 
      'submit': function(event) { 
       this.trigger('submit', event); 
      } 
     }, 
     initialize: function(options) { 
      var self = this; 
      var options = this.options = _.extend(options, { 
       submitButton: false 
      }); 
     } 
    }); 
    Backbone.Form = Form; 
})(); 

而且我通过jQuery的调用这个(在我的索引。 HTML)这样,

$(document).ready(function(){ 
    var myForm = new Backbone.Form({ 
    options: { 
    hasTopButtons : true, 
    hasEdit: false, 
    hasPrint: true 
    } 
}); 

但是,当我使用_.extend功能浅拷贝附加键到options它并不在我看来,包括新的密钥到现有options阵列,而是创建一个新的一个在options之外阵列这样,

What is currently happening

代替下面的结构。

How I expect that to come

有人能帮我找出什么错误吗?

回答

2

您正在调用该功能不正确。你想:

$(document).ready(function(){ 
    var myForm = new Backbone.Form({ 
    hasTopButtons : true, 
    hasEdit: false, 
    hasPrint: true 
    }); 
}); 

你的代码中显式传递有所谓的“选择”单个属性的对象。

而且,在你的 “初始化” 功能,有一个假var声明:

 var options = this.options = _.extend(options, { 
      submitButton: false 
     }); 

这应该可能

 this.options = _.extend({}, options, { 
      submitButton: false 
     }); 

_.extend函数修改的第一个对象,你可能不希望被这样的客户端对象搞乱。因此,您可以传入一个新的空对象,然后将所有客户端属性浅显地复制到其中。

+0

我的不好!你是@Pointy!的现场!:-) –