2016-10-27 35 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