1

バックボーンを使用してGooglePlacesJSAPIにアクセスするためのJSを構築しています。これまでのところ、私はモデルのバインディングに固執しています。

「fetch」を無効にして、GoogleAPIを使用できるようにしました。Googleへの呼び出しは問題なく機能します。

var Places = Backbone.Collection.extend({
    model: Place,

    fetch: function(options) {
        // SNIPPET //

        service = new google.maps.places.PlacesService(map);
        service.nearbySearch(request, this.googlePlaceCallback);

        // SNIPPET //
    },

    parse: function(response){
        // nerver  called
    },

    googlePlaceCallback: function(results, status) {
        // I do something here and is properly called after Google returns a response
    }

});

また、非常に単純なビューを定義しました。

var MapView = Backbone.View.extend({

    initialize: function() {
        this.model = new Places();
        this.model.bind("reset", this.render, this);
        this.model.fetch();
    },

    render : function () {
        console.log( this.model.toJSON() );
    }

});

「モデル」にデータを入力する方法がわかりません。Googleは期待どおりの結果を返しますが、バックボーンモデルに設定できます。'googlePlaceCallback'でやらなければならないことがありますか?Googleの結果がすべて興味深いわけではないので、おそらく「解析」をオーバーライドする必要があります。

4

1 に答える 1

2

results が必要な結果のコレクションであると仮定すると、次のようにコールバックを実装できるはずです。

googlePlaceCallback: function(results, status) {
    this.add(results);
}

Places はバックボーン コレクションであるため、上記のコードで次のメソッドを呼び出すだけです: http://backbonejs.org/#Collection-add

また、googlePlaceCallback 関数内で正しいthis参照を取得する必要があります (コレクションになりたい場合this)。これを行う 1 つの方法は、UnderscoresbindAllメソッド ( http://underscorejs.org/#bindAll ) を使用することです。これを使用して、Backbone クラスのすべてのメソッドがthisCollection 自体のコンテキストを持つようにすることができます。次のように初期化でこれを行うことができます。

initialize: function() {
    _.bindAll(this);
}

また、parse が呼び出されない理由は、fetch をオーバーライドしているためであり、fetch は parse を呼び出します。注釈付きのバックボーン コードを見ると、メソッド呼び出しを確認できます: http://backbonejs.org/docs/backbone.html

于 2012-11-05T01:17:26.553 に答える