Backbone.js 扩展自定义主干视图后未触发的事件
正确的方法是如何使父视图和子视图中的事件都正确注册并激发 通过这种方法,praent的事件将孩子的事件一扫而光。我还尝试将孩子的事件作为Backbone.js 扩展自定义主干视图后未触发的事件,backbone.js,typescript,Backbone.js,Typescript,正确的方法是如何使父视图和子视图中的事件都正确注册并激发 通过这种方法,praent的事件将孩子的事件一扫而光。我还尝试将孩子的事件作为选项的一部分传递给家长,然后让家长在注册之前扩展它们,但家长的事件不再起作用 母公司 // this is helpers/authorization/views/authHelper export class AuthView extends Backbone.View { constructor(options?) { this.ev
选项的一部分传递给家长,然后让家长在注册之前扩展它们,但家长的事件不再起作用
母公司
// this is helpers/authorization/views/authHelper
export class AuthView extends Backbone.View {
constructor(options?) {
this.events = {
'keypress #auth': 'setAuthorizationCodeKeypress',
'click .create': 'setAuthorizationCode'
};
super(options);
}
}
孩子
我希望它们共享相同的元素,只需要调用new EHV.EncoderAPIHelperView().render()编码>以呈现它们。注意:编辑后的答案可能更好
您可以直接在对象内部声明父事件,这样就不必创建新的构造函数。父视图如下所示:
export class AuthView extends Backbone.View {
events = {
'keypress #auth': 'setAuthorizationCodeKeypress',
'click .create': 'setAuthorizationCode'
}
}
现在您可以将child重写为:
import AV = module("helpers/authorization/views/authHelper")
export class PageHelperView extends AV.AuthView {
initialize(options?) {
this.events = {
'click .configHead': 'toggle'
}
}
}
\uux.extend调用将缺少的条目添加到事件中,并替换共享密钥的条目。(见更多)
另外,我对typescript不是很在行,所以这段代码可能有一两个问题。完整的工作解决方案:
父视图:
export class AuthView extends Backbone.View {
constructor(options?) {
this.events = {
'keypress #auth': 'setAuthorizationCodeKeypress',
'click .create': 'setAuthorizationCode'
};
super(options);
}
}
import AV = module("helpers/authorization/views/authHelper")
export class PageHelperView extends AV.AuthView {
constructor(options?) {
super(options);
}
initialize(options) {
this.events = _.extend(this.events, {
'click .configHead': 'toggle'
});
}
}
子视图:
export class AuthView extends Backbone.View {
constructor(options?) {
this.events = {
'keypress #auth': 'setAuthorizationCodeKeypress',
'click .create': 'setAuthorizationCode'
};
super(options);
}
}
import AV = module("helpers/authorization/views/authHelper")
export class PageHelperView extends AV.AuthView {
constructor(options?) {
super(options);
}
initialize(options) {
this.events = _.extend(this.events, {
'click .configHead': 'toggle'
});
}
}
你测试过这个吗?对我来说,只有在向this.delegateEvents()添加调用时,这才有效代码>在扩展之后。Thanks@ryan将其放入initialize
方法中<代码>初始化
在delegateEvents
之前调用(在构造函数中调用)。所以这里在调用之前调用了delegateEvents
。events
是扩展的。不,没有真正测试过,所以您可能是对的,我也同意使用initialize是更好的方法