Reputation: 1912
I have a base view and a child view extending the base view with an attribute called "menu". I tried the following.
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";
}
});
But the childView.render()
does not output #child-menu
it is only set to #base-menu
. Why and how to get the child one set?
Note: there are multiple children views.
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>
Upvotes: 0
Views: 57
Reputation: 17430
To override a property of a parent "class" with Backbone's extend
, just set the property again:
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);
}
});
Creating a child view:
var child = new ChildView();
Should output
Base #base-menu
Child #child-menu
Upvotes: 1