Backbone 视图和控制器之间的事件

Backbone events between view and controller

我正在尝试在模型-视图-控制器模式中使用 Backbone 事件。我的控制器只是一个 JavaScript class,所以我像这样扩展它以支持 Backbone 事件:

function Controller() {
    _.extend(this, Backbone.Events);

    this.listenTo(view, 'some:event', this.onSomeEvent);

    this.onSomeEvent = function() {
        // ... This code never executes.
    }
}

我的视图是 Backbone 单击按钮时执行此操作的视图:

onClick: function() {
    this.trigger('some:event');
}

onClick() 方法响应按钮单击而执行,但控制器的 onSomeEvent() 方法从不执行。我做错了什么?

this.onSomeEvent 应该在调用 this.listenTo 之前定义。现在 this.onSomeEvent 在指定为侦听器时未定义。

你也可以这样定义你的控制器

function Controller() {
    _.extend(this, Backbone.Events);

    this.listenTo(view, 'some:event', this.onSomeEvent);
}

Controller.prototype.onSomeEvent = function() {
    // code
};

然后像这样调用控制器new Controller()

控制器

 this.listenTo(currentView, 'AdminMenu:click', function (data) {...})

查看

  return {
        index: Marionette.ItemView.extend({
            template:file,
            events: {
                'click .admin-menu-ref': 'goToMenuItem'
            },
            goToMenuItem: function (e) {
                e.preventDefault();
                this.trigger('AdminMenu:click', {
                    target: e.currentTarget
                });
            }
        })
    }