扩展骨干对象

时间:2012-08-18 16:04:36

标签: javascript backbone.js prototype underscore.js extending

我需要扩展主要的Backbone功能(View,Model,Router)和一些自己的成员。但是,以下操作无法正常工作:

Backbone.View.prototype.foo = ["bar"];

不可否认,表达方式

testView = new Backbone.view.extend({})
testView2 = new Backbone.view.extend({})
alert(testView.foo.length);

陈述1但设置

testView2.foo.push("blah");

还将字符串添加到testView.foo,因为引用是相同的。

任何人都明白如何扩展这些对象?

提前致谢:)

利奥

1 个答案:

答案 0 :(得分:4)

通常,您不会扩展标准视图,而是创建自己的基本视图类型。您应该避免更改Backbone原型的值。

var BaseView = Backbone.View.extend({
  foo: null,
  initialize: function(options){
    this.foo = ["bar"];

    Backbone.View.prototype.initialize.apply(this, arguments);
  }
});

var testView = new BaseView();
var testView2 = new BaseView();
console.log(testView.foo.length); // prints '1'
console.log(testView2.foo.length); // prints '1'    

testView2.foo.push("blah");

console.log(testView.foo.length); // prints '1'
console.log(testView2.foo.length); // prints '2'