BackboneJS:如何从视图的事件哈希调用函数外部视图?

时间:2013-12-11 19:30:42

标签: javascript jquery backbone.js

举个例子,这就是我要做的......

function doSomething(customParameter) {
    console.log(customParameter);
}

var MyView = Backbone.View.extend({
    // Other view stuff, skipping it...
    events: {
        'click .someClass': doSomething(customParameter)
    }
});

这里的动机是我希望能够将变量(视图的本地)传递给视图外的其他函数。我想这样做的原因是“其他功能”只写了一次而不是四次......它会严重地保存我的项目超过100行代码。

经过大量谷歌搜索后,我还没有找到解决方案...任何想法?

谢谢!

2 个答案:

答案 0 :(得分:5)

这是一种方法:

function doSomething(customParameter) {
    console.log(customParameter);
}

var MyView = Backbone.View.extend({
    // Other view stuff, skipping it...
    events: {
        'click .someClass': function(ev) { doSomething(this.customParameter); }
    }
});

在此示例中,您声明了一个函数,该函数将本地视图所需的参数传递给该doSomething方法。


另一种方法是使用当前视图的上下文调用doSomething(),如果你不想传递所有必需的参数:

function doSomething(ev) {
    console.log(this.customParameter); // here, the context this will be the view.
}

var MyView = Backbone.View.extend({
    // Other view stuff, skipping it...
    events: {
        'click .someClass': function(ev) { doSomething.call(this, ev); }
    }
});

更多的OOP方法是为该公共代码提供基本视图:

var MyBaseView = Backbone.View.extend({
    doSomething: function(ev) {
        console.log(this.customParameter);
    }
});

var MyView = MyBaseView.extend({
    extends: {
        'click .someClass': 'doSomething'
    }
});

可能有更多方法可以做到这一点,您只需要看看哪种方案最适合您的需求。

答案 1 :(得分:3)

您可以尝试调用视图内部的方法来调用相关方法

var MyView = Backbone.View.extend({
    // Other view stuff, skipping it...
    events: {
        'click .someClass': 'callSomething'
    },
    callSomething: function() {
        doSomething(customParameter);
    }
});