Backbone.js与Google地图的获取问题

Backbone.js与Google地图的获取问题,backbone.js,backbone-events,Backbone.js,Backbone Events,通过主干网,我从谷歌地图中获取结果,返回用户所在位置的标记。结果填充了一个集合,每当用户根据新的位置边界移动地图时,我都会清除该集合。我正在使用google map idle事件获取此信息并更改集合的URL 为了管理标记,我用每个标记填充一个数组 我遇到的问题是,我得到了第一组标记,但当地图移动时,它不会写入任何新标记,当您检查标记数组时,它的结果与上次相同。如果我调用AJAX,我会得到期望的结果,但是我希望将这些都保存在主干集合中,就像我对模型的其他过程一样 /* Tracking Page

通过主干网,我从谷歌地图中获取结果,返回用户所在位置的标记。结果填充了一个集合,每当用户根据新的位置边界移动地图时,我都会清除该集合。我正在使用google map idle事件获取此信息并更改集合的URL

为了管理标记,我用每个标记填充一个数组

我遇到的问题是,我得到了第一组标记,但当地图移动时,它不会写入任何新标记,当您检查标记数组时,它的结果与上次相同。如果我调用AJAX,我会得到期望的结果,但是我希望将这些都保存在主干集合中,就像我对模型的其他过程一样

/* Tracking Page Items */
var allPlace = Backbone.Model.extend({

    createMarker:function(){      

        var marker = new google.maps.Marker({
            position: this.getLatLng(),
            title: this.get("name"),        
            location_type: this.get("type")
        });

        return marker;       

    }

});

var MarkersCollection = Backbone.Collection.extend({

    model: allPlace,

    url:function(){                   
        return '/'
    }

})

var markersArray = [];
var mapAll = Backbone.View.extend({

    initialize: function() {
        _.bindAll(this, 'render', 'createMarkers'); // get access to this in other methods
        this.collection.bind('reset', this.render, this);
    },

    render: function() {

    // Load map scripts and initialise
        if(typeof google === "undefined"){
            nzp.loadGoogleMap();
        } else {
            nzp.initializeMap();
        };

    // Current location                 
        myLocations = {
            lat: this.collection.lat,
            lng: this.collection.lng
        };


    // Listen for map movement
        var self = this;
        google.maps.event.addListener(map, 'idle', function() {
            var bounds = map.getBounds();   
            var lat1 = bounds.ca.b;             
            var lng1 = bounds.ea.b;
            var lat2 = bounds.ca.f;
            var lng2 = bounds.ea.f;         
            self.showMarkers(lat1, lng1, lat2, lng2);
            });
        },

    // update URL based on new bround   
        showMarkers: function(lat1, lng1, lat2, lng2) {

            var markerCollection = new MarkersCollection;
            nzp.infoWindow = new google.maps.InfoWindow();

            lat = myLatlng.Xa;
            lng = myLatlng.Ya;
            lat1 = lat1;
            lng1 = lng1;
            lat2 = lat2;
            lng2 = lng2;

            // Collection URL build from parameter adn current location
                markerCollection.url = "http://blah.com/locator/api/locations?api_key=XXX&nearby_latitude="+lat+"&nearby_longitude="+lng+"&lat1="+lat1+"&lng1="+lng1+"&lat2="+lat2+"&lng2="+lng2+"&max=10&format=jsonp&callback=?";     

            // Fetch collection
            markerCollection.fetch({

                success: function(results) {

                    // Clear the markers array
                    for (i in markersArray) {
                        markersArray[i].setMap(null);
                    }
                    markersArray.length = 0;

                    // Loop over items in collection

                    results.map(function(item){

                        var marker = item.createMarker();
                        marker.setMap(map);

                        // Create a marker based on each item
                        (function(marker, item) {

                            google.maps.event.addListener(marker, "click", function(e) {
                            nzp.infoWindow.setContent(infowindowContent(item)); // Info window content is processed in a method within the model 
                            nzp.infoWindow.open(map, marker);
                            });             

                            // Place each marker in the markers arrya
                                markersArray.push(marker); // Push markers into an array so they can be removed

                        })(marker, item);

                    }, this);
                }
            });

            // Set markers to vidsible
                $.each(markersArray, function(index, item){         
                    markersArray[index].setVisible(true);
                });

});

解决了这个问题。这个问题与传递给API的值有关,而不是我所认为的更新集合URL的方式


我传递了一个边界和一个当前位置以及边界,这使得API总是返回相同的结果。我使用的AJAX版本的代码在URL中有一个输入错误,这实际上允许API返回正确的结果。

mu太短了。我的错是,我提问题的时候已经晚了。现在分类了。