2016-10-27 96 views
0

我有一個基本視圖和一個子視圖,它使用名爲「菜單」的屬性擴展了基本視圖。我嘗試了以下。覆蓋子視圖中的自定義屬性

var baseView=Backbone.View.extend({ 
    menu:"#base-menu", 
    initialize:function(){ 
     //some code 
    }, 
    render:function(){ 
     console.log(this.menu); 
    } 
}); 
var childView=baseView.extend({ 
    initialize:function(){ 
     baseView.prototype.initialize.apply(this); 
     this.menu="#child-menu"; 
    } 
}); 

childView.render()不輸出#child-menu它只是設置爲#base-menu。爲什麼以及如何讓孩子一套?

注意:有多個孩子的意見。

var baseView = Backbone.View.extend({ 
 
    menu: "#base-menu", 
 
    initialize: function() { 
 
    console.log(this.menu); 
 
    }, 
 

 
}); 
 

 
var firstView = baseView.extend({ 
 
    initialize: function() { 
 
    baseView.prototype.initialize.apply(this, arguments); 
 
    this.menu = "#child-menu"; 
 
    console.log(this.menu); 
 

 
    } 
 
}); 
 

 
var firstViewInstance = new firstView();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="http://underscorejs.org/underscore-min.js"></script> 
 
<script src="http://backbonejs.org/backbone-min.js"></script>

+4

似乎工作正常(https://jsfiddle.net/ambiguous/hdc92byn/)。你能重現你的問題嗎?你真的在做'childView.render()'而不是'c = new childView; c.render()'?通常你會把'BaseView'和'ChildView'作爲「classes」,'childView'作爲BTW的「實例」。 –

回答

1

要覆蓋父 「類」 與骨幹extend的屬性,只需設置屬性再次:

var BaseView = Backbone.View.extend({ 
    menu: "#base-menu", 
    initialize: function() { 
     console.log("Base", this.menu); 
    }, 

}); 

var ChildView = BaseView.extend({ 
    menu: "#child-menu", // override directly here 
    initialize : function(options) { 
     ChildView.__super__.initialize.apply(this, arguments); 
     console.log("Child", this.menu); 
    } 
}); 

創建子視圖:

var child = new ChildView(); 

應該輸出

Base #base-menu 
Child #child-menu