如何获取和填充Google Places JS API的主干模型?

时间:2012-11-03 22:56:46

标签: backbone.js google-places-api

我正在实施一个需要访问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结果填充模型?这是个坏主意吗?

1 个答案:

答案 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,那将是明智的。