我正在实施一个需要访问Google Places JS API的系统。我一直在使用rails来完成大部分项目,但现在我想在我的一个视图中注入一些AJAX。基本上它是一个显示您所在位置附近的地方的视图。为此,我正在使用谷歌的JS API。一个快速的工作流程将是:
1-用户输入文本查询并按Enter键。 2-有一个AJAX调用来从Google Places API请求数据。 3-成功的结果将呈现给用户。
问题主要在第2步。我想使用backbone,但是当我创建骨干模型时,它会请求'rootURL'。如果对服务器的请求是从服务器完成的,那么这不会是一个问题,但不是。
地方通话就像这样:
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
传递回调函数:
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var place = results[i];
createMarker(results[i]);
}
}
}
是否可以覆盖骨干模型中的'fetch'方法并使用成功的Places结果填充模型?这是个坏主意吗?
答案 0 :(得分:1)
可以覆盖骨干模型的获取方法。
var mapModel = Backbone.Model.extend({
fetch: function (options) {
// do your call to google places here
},
callBackFunctionForGoogleMaps: function (results, status) {
// call back function here would set model properties
}
});
return mapModel;
这样您可以覆盖fetch并删除Backbone的默认行为以进行ajax调用。
正如您想要覆盖Backbone模型fetch但仍然具有model.fetch的默认行为一样,您可以执行以下操作。请注意返回调用Backbone.Model.fetch。
var mapModel = Backbone.Model.extend({
fetch: function (options) {
// do any pre-fetch actions here
return Backbone.Model.fetch.call(options);
}
});
return mapModel;
在这里覆盖fetch方法可能不是一个坏主意,因为你仍然在为你的模型提取数据,而不是通过你端的ajax调用。如果留下评论,注意到你因为某种原因而以这种方式重写fetch,那将是明智的。