我是backbonejs的新手。我试图将正确的this
对象传递给回调函数,其中该函数是视图的一种方法。
我目前的解决方案:
APP.LocationFormView = APP.View.extend({
initialize: function () {
if (navigator.geolocation) {
var that = this;
var success = function(position) {
_.bind(that.onSuccessUpdatePos, that, position)();
};
var error = function(error) {
_.bind(that.onFailUpdatePos, that, error)();
}
navigator.geolocation.getCurrentPosition(success,
error);
} else {
}
},
onSuccessUpdatePos: function(position) {
// We can access "this" now
},
onFailUpdatePos : function(error) {
// We can access "this" now
}
});
这是实现我想要的正确方法吗? 对此有没有那么冗长的解决方案?
答案 0 :(得分:5)
我就是这样做的。 bindAll
的一个不错的方面是,如果您向LocationFormView
添加其他功能,它们将自动绑定this
。
APP.LocationFormView = APP.View.extend({
initialize: function () {
_.bindAll(this);
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(this.onSuccessUpdatePos,
this.onFailUpdatePos);
} else {
}
},
onSuccessUpdatePos: function(position) {
// We can access "this" now
},
onFailUpdatePos : function(error) {
// We can access "this" now
}
});
答案 1 :(得分:2)
_.bind
用于以后绑定。你通常会这样做:
that.onSuccessUpdatePos(position); // that is already the context
但相反,你可以直接传递它:
var success = _.bind(that.onSuccessUpdatePos, that, position);
var error = _.bind(that.onFailUpdatePos, that, error);
navigator.geolocation.getCurrentPosition(success, error);
也就是说,如果您感觉比“手动”解决方案更清楚。