我刚开始写一个像这样的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
数组之外创建一个新的,
而不是以下结构。
有人可以帮我找出这里出了什么问题吗?
答案 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()
将所有客户端属性浅层复制到其中。