1

バックボーン モデルを定義するときの「this」のスコープに問題があります。関数 updateGeoLocation では、マーカーの位置と配置の更新を処理する匿名関数を呼び出しています。

問題は、無名関数 'this' 内で、モデルではなくウィンドウを参照することです。これを init 関数に追加しようとしましたが、それでも問題は解決しません:

 _.bindAll(this , 'updateGeoLocation'); 

コードは次のとおりです。

var googleMapsModel = Backbone.Model.extend ({


    //Init map according to the window height
    initialize: function () {
        _.bindAll(this , 'updateGeoLocation');
        this.set('currentLocation', new google.maps.LatLng(-34.397, 150.644));
        $("#map-content").height(this.getRealContentHeight());
        var mapOptions = {
            zoom: 15,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map-canvas"),
            mapOptions);
        this.updateGeoLocation();
    },
    //Update geo location and place marker on the map
    updateGeoLocation: function () {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function (position) {
                lat = position.coords.latitude;
                long = position.coords.longitude;
                console.log (lat);
                console.log((long));
                currentLocation = new google.maps.LatLng(lat,long);
                map.setCenter(currentLocation);
                //update marker
                this.updateCurrentLocationMarker(currentLocation);
            }) , function() {
                alert("no Geo Location");
            };
        }
    },
updateCurrentLocationMarker: function (markerLocation) {
        myLocationMarker = new google.maps.Marker({
            position: markerLocation,
            map: map
        });
        this.model.set('currentLocationMarker', myLocationMarker);
    },

どんな助けでも感謝されます

4

1 に答える 1

1

updateGeoLocationメソッドを次のように置き換えます。

updateGeoLocation: function () {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(_.bind(function (position) {
            lat = position.coords.latitude;
            long = position.coords.longitude;
            console.log (lat);
            console.log((long));
            currentLocation = new google.maps.LatLng(lat,long);
            map.setCenter(currentLocation);
            //update marker
            this.updateCurrentLocationMarker(currentLocation);
        }, this)) , function() {
            alert("no Geo Location");
        };
    }
},

ここでのキーは _.bind です。ドキュメントを見てください。

于 2013-09-24T09:26:39.570 に答える