有没有办法让Marionette View通过事件哈希来监听事件?

时间:2014-04-30 22:23:13

标签: backbone.js marionette backbone-views backbone-events

我无法确定如何快速完成,只需为Backbone.Marionette视图上触发的事件附加一个监听器。

我现在可以通过.on添加一个监听器来完成我正在寻找的东西,但是通过事件或触发器哈希有一个快速的方法吗?像这样的东西似乎应该有效但不是:

return Marionette.ItemView.extend({      
    triggers: {
        "click .close": "menu:close"
    },

    events: {
        "menu:close @": "close",
    },

    close: {
        // do stuff
    }
}

1 个答案:

答案 0 :(得分:3)

<强>更新
实际上有一种(简单的)方法可以完全按照你想要的方式进行。

// Itemview
var itemView = Marionette.ItemView.extend({
    initialize: function() {
        Marionette.bindEntityEvents(this, this, this.events);  
    },
    template: "#item",
    triggers: {
        "click .btn": "menu:performAction"
    },
    events: {
        "menu:performAction": "performAction"
    },
    performAction: function() {
        console.log('test');
    }
});

简而言之,这会将包含散列的events属性绑定到views事件。

小提琴:http://jsfiddle.net/8T68P/
文档:https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.functions.md#marionettebindentityevents

旧答案
看到这个小提琴:http://jsfiddle.net/Cardiff/K5TTQ/

听取这样的事件确实不会奏效。如果您碰巧在视图中使用.on方法。请使用listenTo。视图关闭时,将正确清理。像这样:

// Itemview
var itemView = Marionette.ItemView.extend({
    initialize: function() {
        var view = this;
        view.listenTo(view, "menu:performAction", view.performActionFromListenTo);   
    },
    template: "#item",
    triggers: {
        "click .btn": "menu:performAction"
    },        
    performActionFromListenTo: function() {
        console.log('test');
    }
});