0

我正在实现一个需要访问Google Places JS API的系统。在大部分项目中,我一直在使用 rails,但现在我想在我的一个视图中注入一点 AJAX。基本上,它是一个显示您所在位置附近地点的视图。为此,我使用了 Google Places 的 JS API。一个快速的工作流程是:

1- 用户输入文本查询并点击回车。2- 有一个 AJAX 调用从 Google Places API 请求数据。3-成功的结果呈现给用户。

问题主要出在第 2 步。我想为此使用骨干网,但是当我创建骨干网模型时,它会请求“rootURL”。如果对 Places 的请求是从服务器完成的,这将不是问题,但事实并非如此。

地方电话是这样完成的:

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

是否可以覆盖骨干模型中的“获取”方法并使用成功的 Places 结果填充模型?这是一个坏主意吗?

4

1 回答 1

1

可以覆盖骨干模型的 fetch 方法。

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 是有原因的,这将是明智的。

于 2012-11-03T23:19:08.680 回答