Backbone:如何绑定listenTo-callback的参数?

Fdr*_*Fdr 4 javascript backbone.js marionette

是否可以为listenTo回调绑定函数参数?

我到现在为我添加了一个包装方法'myHandler',我想摆脱它:

// Basic marionette layout
var view = Marionette.Layout.extend({

initialize: function() {
    // wrapping view logic inside a custom object
    this.controller = new MyViewController(); 
},

// creates a sub view and adds event handlers
someFunc: function() {
    var subView = new MySubView();

    // HERE: how to bind args for callback?
    this.listenTo(subView, "myEvent", this.myHandler, this);
}, 

// this is a dummy wrapper that I want to remove
myHandler: function(e) {
    this.controller.handleIt(this, e);
},
Run Code Online (Sandbox Code Playgroud)

我想做的是:

someFunc: function() {
    var subView = new MySubView();

    // here wrapIt binds 'this' as first argument for handleIt
    this.listenTo(subView, "myEvent",
        wrapIt(this.controller.handleIt, this), this);
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*dyk 7

listenTo只接受3个参数.如果你需要将函数绑定到某个对象,那么跨浏览器的方式是使用下划线_.bind函数:

this.listenTo(subView, "myEvent", _.bind(this.myHandler, this))
Run Code Online (Sandbox Code Playgroud)

但是,当您调用的对象listenTo是默认上下文时,通常不需要它.要阅读更多信息,请参阅以下github问题: