如何观察静态对象的变化?

时间:2012-12-13 00:57:55

标签: ember.js

我正在尝试使用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')解决问题。它还能用于绑定吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

当您编写contentBinding: 'App.Location.geocoded'时,App.Location.geocoded更改时内容会更新。但是在成功处理程序中,您不会更改地理编码对象,而只是更新其响应属性。

因此,如果要保持与地理编码对象的绑定,可以尝试执行

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

在ajax成功处理程序中。