1

Google マップ JSON API を使用してジオコーディングを実装しようとしています。

場所のモデルを作成し、ObjectController モデルには非同期ジオコーディング ロジックが含まれています。

コントローラーがモデルへの変更を監視して、最新のデータを反映するようにします。

私はバインディングとオブザーブの両方を試していますが、両方とも機能しません:

App.Location = Ember.Object.extend({
    formatted_address: null,
    location: {
        lat: null,
        lng: null
    }
})

App.Location.reopenClass({
    geocoded: Ember.Object.create(),
    geocode: function(address) {
        $.ajax({
            url: 'http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=' + address,
            dataType: 'json',
            context: this,
            success: function(response) {
                App.Location.geocoded.set('response', response);
            }
        });

        return this.geocoded;
    }
});

App.LocationController = Ember.ObjectController.extend({
    contentBinding: 'App.Location.geocoded',
    testProperty: function() {
        console.log('test');    
    }.property('content'),
    testObserve: function() {
        console.log('test');
    }.observes('App.Location.geocoded')
});

observes('App.Location.geocoded.response')編集:問題を修正するために変更します。バインディングでも機能しますか?これを行うより良い方法はありますか?

4

1 に答える 1

1

ここに書くcontentBinding: 'App.Location.geocoded'と、 App.Location.geocoded が変更されたときにコンテンツが更新されます。ただし、success ハンドラーでは、ジオコーディングされたオブジェクトを変更せず、その応答プロパティを更新するだけです。

したがって、ジオコーディングされたオブジェクトとのバインディングを維持したい場合は、次のことを試みることができます

App.Location.set('geocoded', Ember.Object.create({response: response}));

ajax 成功ハンドラーで。

于 2012-12-13T13:03:04.250 に答える