在Backbone.js中将回调绑定到此
Binding a callback to this in Backbone.js
这可能很简单,但就我的生活而言,我不明白为什么这没有正确绑定。
在我的主要观点中:
initMap: function() {
forge.logging.log('... Initializing map');
var createMap = function(position) {
var latLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude, true);
var options = {
zoom: 15,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
this.map = new google.maps.Map(document.getElementById('map_canvas'), options);
this.addMarkers();
};
_.bind(createMap, this);
forge.geolocation.getCurrentPosition(createMap);
forge.logging.log('Created map ...');
},
addMarkers: function() {
alert('addMarkers');
forge.logging.log('... Adding markers');
var tempData = ["xxxxxxxx",
"xxxxxxx",
"xxxxxxxx"];
_.each(tempData, function(addr){
google.maps.Geocoder.geocode({'address': addr}, function(res, status){
if (status == google.maps.GeocoderStatus.OK) {
new google.maps.Marker({
map: this.map,
position: res[0].geometry.location
});
}
});
});
forge.logging.log('Added markers ...');
}
由于某种原因,this.addMarkers()似乎没有被调用。我猜是因为这个绑定不正确。不过地图显示得很好。
我应该如何将其绑定到我的createMap回调函数?
来自精细手册:
绑定
_.bind(function, object, [*arguments])
将函数绑定到对象,这意味着无论何时调用该函数,this的值都将是目标。或者,将参数绑定到函数以预填充它们,也称为部分应用程序。
var func = function(greeting){ return greeting + ': ' + this.name }; func = _.bind(func, {name : 'moe'}, 'hi'); func(); => 'hi: moe'
文档可能会更明确一点,但重要的一点在示例中:
func = _.bind(func, ...)
所以_.bind
返回绑定函数,它不会在适当的位置修改函数。你想这么说:
createMap = _.bind(createMap, this);
或者这个:
var createMap = function(position) { ... };
forge.geolocation.getCurrentPosition(_.bind(this, createMap));
也许您对在其他地方使用_.bindAll
感到困惑。_.bindAll
函数看起来像是在修改现有的函数,但实际上是在修改object
,因此:
_.bindAll(obj, 'm1', 'm2');
或多或少在内部这样做:
obj.m1 = _.bind(obj, obj.m1);
obj.m2 = _.bind(obj, obj.m2);
相关文章:
- 为什么prototypjs观察到回调函数有绑定
- 在Backbone.js中将回调绑定到此
- 将web服务回调的结果绑定到Javascript中的调用函数
- 将回调绑定到没有隔离作用域的指令
- 将其绑定在 backbone.js 中的 jQuery 回调中
- 将类方法绑定到类外绑定的事件处理程序内的AJAX成功回调
- KnockoutJS在绑定完成后触发回调
- 使用闭包/函数绑定将自函数作为回调传递
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- 异步加载ASP.NET绑定的Javascript,然后调用回调
- 绑定promise回调函数的“this”范围
- 在呈现项目后,挖空选择绑定回调的选项
- 主干 - 使用嵌套的 json 数据将表单提交绑定回模型
- 无法访问“”;这个“;backbone.js应用程序中的绑定回调
- 如何在可观察数组中正确地将文本框值绑定回模型
- 异步范围绑定回调中的JavaScript作用域操作不适用
- 将$(this)传递给绑定回调函数
- 如何在整个jstree重载事件上绑定回调函数
- jQuery,绑定回调到任何函数
- 绑定回调参数