我有一个使用视图继承的案例,我的代码基本上如下所示:
parentView = Backbone.View.extend({
events: {
"some event": "business"
},
initialize: function(){
_.bindAll(this);
},
business: function(e){
...
this.someFunc && this.someFunc();
...
}
});
childView = parentView.extend({
events: {
...
},
constructor: function(){
this.events = _.extend( {}, parentView.prototype.events, this.events );
parentView.prototype.initialize.apply( this );
},
initialize: function(){
_.bindAll(this);
},
someFunc: function(){
...
}
});
更新:已移动this.events
扩展到构造函数。
我的孩子视图有someFunc
在其中,以及在父视图中的某些业务函数期间,它应该调用该函数(如果存在)。如果this
正确设置为childView,然后this.someFunc
应该存在。然而,这不是我所经历的行为。
在此期间initialize
函数(在父级中),this
确实设置为子视图。然而,当some event
火灾、business
函数被调用this
set to parentView
.
你有没有尝试过延长this.events
在构造函数中,而不是在初始化函数中?如果你在初始化时这样做,那就太晚了;活动代表团business
函数已经在构造函数中设置,并且将指向parentView
(请参阅调用this.delegateEvents();
在 Backbone.View 的构造函数中)。
更新了一个工作示例:
ParentView = Backbone.View.extend({
name: 'ParentView',
events: {
"event": "business"
},
business: function(e){
this.someFunc && this.someFunc();
}
});
ChildView = ParentView.extend({
name: 'ChildView',
events: {
},
constructor: function(){
this.events = _.extend( {}, ParentView.prototype.events, this.events );
console.debug( this.events );
ParentView.prototype.constructor.apply( this, arguments );
},
someFunc: function(){
console.debug('someFunc; this.name=%s', this.name);
}
});
child = new ChildView();
$( child.el ).trigger('event');
// logs 'this' in 'someFunc'; the name is 'ChildView'.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)