我猜这是一个简单的问题。我是js
的新用户,特别是在Backbone.js
。
我想知道的是如何在jquery函数中引用我的函数。
getLanguages: function() {
...
return languages;
},
render: function() {
...
$("input[type='checkbox']").bind("change", function() {
// todo: getLanguages
});
}
我尝试通过this
获取语言,但当然,在这种情况下我获得了checkbox
。
修改: 这很简单。非常感谢所有人!!!
答案 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();
...
});
}