0

正确注册父视图和子视图中的事件并触发的正确方法是什么?

使用这种方法,prent 的 events 事件会清除 child 的 events。我还尝试将孩子的事件作为父母的一部分传递options给父母,然后让父母在注册之前扩展它们,但随后父母的事件不再起作用。

家长

// this is helpers/authorization/views/authHelper
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?) {
        this.events = {
            'click .configHead': 'toggle'
        }
        super(options);
    }
}

我希望它们共享相同的元素,并且只需要调用new EHV.EncoderAPIHelperView().render();来呈现它们。

4

2 回答 2

1

注意:用可能更好的答案编辑

您可以直接在对象内声明父事件,这样做,您不必创建新的构造函数。父视图如下所示:

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'
        }        
    }
}

_.extend调用将丢失的条目添加到事件并替换共享键的条目。(在这里查看更多)

另外,我对打字稿不是很好,所以这段代码可能有一两个问题。

于 2013-06-06T14:13:38.040 回答
0

完整的工作解决方案:

父视图:

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'
        });
    }
}
于 2013-06-07T13:33:37.747 回答