簡體   English   中英

在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 _.bind(function, object, [*arguments])

結合的功能對象 ,這意味着無論何時調用該函數時, 這個值將是的對象 (可選)將參數綁定到函數以預填充它們,也稱為部分應用程序

 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM