2016-10-27 4 views
0

"menu"という属性でベースビューと子ビューを拡張しました。私は次のことを試みた。子ビューのカスタムプロパティをオーバーライドします。

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/)うまく動作するようです。あなたはあなたの問題を再現できますか? 'c = new childViewではなく' childView.render() 'を実際にやっていますか? c.render() '?従来は、「クラス」として「BaseView」と「ChildView」、インスタンス「BTW」として「childView」を持っていました。 –

答えて

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 
関連する問題