gpt4 book ai didi

javascript - backbone.js View 继承。 `this` 父级分辨率

转载 作者:数据小太阳 更新时间:2023-10-29 04:34:07 26 4
gpt4 key购买 nike

我有一个使用 View 继承的案例,我的代码基本上是这样的:

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 扩展移至构造函数。

我的 subview 中有someFunc,并且在父 View 中的某些业务功能期间,它应该调用该功能(如果存在)。如果 this 正确设置为 childView,则 this.someFunc 应该存在。但是,这不是我遇到的行为。

initialize 函数(父 View )中,this 确实被设置为 subview 。但是,当 某些事件 触发时,调用 business 函数并将 this 设置为 parentView

最佳答案

您是否尝试过在构造函数中而不是在初始化函数中扩展 this.events?如果你在初始化时这样做,你就来不及了; business 函数的事件委托(delegate)已经在构造函数中设置,并将指向 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'.

关于javascript - backbone.js View 继承。 `this` 父级分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com