0

Google Places JS APIへのアクセスを必要とするシステムを実装しています。ほとんどのプロジェクトで Rails を使用してきましたが、ビューの 1 つに AJAX を少し挿入したいと考えています。基本的には、現在地の近くの場所を表示するビューです。このために、Google プレイスの JS API を使用しています。簡単なワークフローは次のようになります。

1- ユーザーがテキスト クエリを入力し、Enter キーを押します。2- Google Places API からデータを要求するための AJAX 呼び出しがあります。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]);
    }
  }
}

バックボーン モデルの 'fetch' メソッドをオーバーライドして、成功した 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 モデルのフェッチをオーバーライドしたいが、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 呼び出しを使用するのではありません。ただし、何らかの理由でこの方法でフェッチをオーバーライドしていることに注意してコメントを残すことは賢明です。

于 2012-11-03T23:19:08.680 に答える