如何从jquery中的另一个函数调用父类的函数

时间:2014-05-25 05:23:36

标签: javascript jquery backbone.js

我猜这是一个简单的问题。我是js的新用户,特别是在Backbone.js

我想知道的是如何在jquery函数中引用我的函数。

getLanguages: function() {

   ...

   return languages;
},

render: function() {

    ...

    $("input[type='checkbox']").bind("change", function() {

       // todo: getLanguages
    });

}

我尝试通过this获取语言,但当然,在这种情况下我获得了checkbox

修改: 这很简单。非常感谢所有人!!!

3 个答案:

答案 0 :(得分:3)

这是Javascript中的经典问题。您需要在回调中引用this,但this会更改要绑定的元素。一种廉价的方式:

render: function() {
    var that = this;

    $("input[type='checkbox']").bind("change", function() {
       that.getLanguages();
    });
}

that将定义为定义this的{​​{1}}。

然而,你正在使用Backbone,它有更合适的方法来处理这种情况。我不知道您的render课程的名称,但这里是example adapted from the documentation

Backbone.View

var DocumentView = Backbone.View.extend({ events: { "change input[type='checkbox']": "doSomething" }, doSomething: function() { this.getLanguages(); # uses the correct this } }); 内拨打bind不是The Backbone Way。 制作的骨干视图可以处理事件委派,而不必偶然传递render

答案 1 :(得分:1)

在渲染函数范围内的绑定更改事件之前保存此对象。

render: function() {

    var CurrentObj = this;

    $("input[type='checkbox']").bind("change", function() {
        CurrentObj.getLanguages();
    });

}

答案 2 :(得分:1)

您可以将适当的对象保存到局部变量中,因此从事件处理程序中,您仍然可以访问它:

getLanguages: function() {

   ...

   return languages;
},

render: function() {

    ...
    var self = this;

    $("input[type='checkbox']").bind("change", function() {
       var lang = self.getLanguages();
       ...
    });

}