Backbone View扩展受到污染

时间:2014-12-17 11:05:59

标签: backbone.js view

我有一个代表模态的视图。此视图具有一些属性,如页脚额外类。 我遇到了麻烦,当某个模态更改了它的值时,它们都会收到相同的属性。

这是一个例子:

var ModalView = AlertingView.extend({
    className : "modal",
    paramsTemplate: { footerClass: "" }   
});

之后,我使用了具有更改属性的模态。

SpecialModal = ModalView.extends({
    initialize: function() {
       this.paramsTemplate.footerClass = "white";
    } 
})

因此,如果我实例化普通模态,则设置此参数! :'(

NormalModal = ModalView.extends({
    initialize: function() {
       console.log(this.paramsTemplate.footerClass);//shows 'white'!
    } 
})

你知道如何解决它吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

http://jsfiddle.net/JQu5Q/11/

这个小提示演示了你的问题。

只要您没有为SpecialModal的每个实例都创建NormalModal的任何实例。

这是因为paramsTemplate是一个类变量,而不是一个实例变量。一旦创建了SpecialModal的实例,它就会更新classVariable,因此所有对象都会反映出这种变化。

幸运的是,我几天前就遇到过类似问题Backbone.js view instance variables?

解决方案:

http://jsfiddle.net/JQu5Q/12/

var ModalView = Backbone.View.extend({
    className : "modal",
    initialize:function(){
        this.paramsTemplate= { footerClass: "" }   ;
    }
});
SpecialModal = ModalView.extend({
    initialize: function() {
       ModalView.prototype.initialize.call(this);
       this.paramsTemplate.footerClass = "white";
        console.log(this.paramsTemplate.footerClass);
    } 
})
NormalModal = ModalView.extend({
    initialize: function() {
        ModalView.prototype.initialize.call(this);
       console.log(this.paramsTemplate.footerClass);
    } 
})