_.extend没有正确地将目标浅复制到目的地

时间:2017-04-11 13:48:01

标签: javascript jquery backbone.js

我刚开始写一个像这样的Backbone库,

(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(在我的index.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

有人可以帮我找出这里出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

您未正确调用该功能。你想要:

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

您的代码显式传递一个对象,该对象具有一个名为" options"。

的属性

另外,在你的"初始化"功能,有一个虚假的var声明:

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

那应该可能

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

_.extend函数修改了第一个对象,你可能不想弄乱这样的客户端对象。因此,您可以传入一个新的空对象,_.extend()将所有客户端属性浅层复制到其中。