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