Backbone.js 扩展自定义主干视图后未触发的事件

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

正确的方法是如何使父视图和子视图中的事件都正确注册并激发

通过这种方法,praent的事件将孩子的事件一扫而光。我还尝试将孩子的事件作为
选项的一部分传递给家长,然后让家长在注册之前扩展它们,但家长的事件不再起作用

母公司

// 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是更好的方法