2013-05-08 76 views
3

這是我的控制器EventTimezoneController。其content屬性設置爲Event模型。Ember,觀察者以奇怪的順序觸發

App.ChallengeTimezoneController = Ember.ObjectController.extend 
    timezones: [{value: "", label: ""}, {...}] 

    timezoneDidChange: (-> 
     console.log "In controller", @get("timezone") 
    ).observes("timezone") # I also tried "content.timezone" 

現在我Event型號:

App.Event = App.Challenge = DS.Model.extend(Ember.Validations, 
    timezone: DS.attr('string') 

    timezoneDidChange: (-> 
     console.log "In model", @get("timezone") 
    ).observes("timezone") 
) 

然後,我有一個TimezoneSelect視圖

App.TimezoneSelect = Ember.Select.extend 
    valueBinding: "controller.timezone" 
    contentBinding: "controller.timezones" 
    optionValuePath: "content.value", 
    optionLabelPath: "content.label" 

現在,這裏的問題:當我選擇一個新的值在選擇下拉列表中,日誌顯示:

> In controller American Samoa 
> In model American Samoa 

爲什麼從控制器的方法timezoneDidChange的一個模型之前調用,因爲從我的理解,它的觀測模型的屬性?

+0

這是一個錯字或是否缺少了' - >''中timezoneDidChange:'模型? – intuitivepixel 2013-05-08 23:02:36

+0

是一個錯字,謝謝。 – Robin 2013-05-09 00:57:53

回答

1

ember.js,控制器是爲了代理模型,因此是有意義的調用所計算的屬性中的控制器上的第一功能。作爲參考,你可以看看這個非常豐富的talk from Luke Melia at Ember.js NYC,特別是at min 31:30,其中幻燈片顯示的概念。

希望它有助於

+0

我明白你的意思了。只是我從控制器中觸發了'timezoneDidChange'方法的保存。那時發生的事情是,當時的時區值發生了變化,但尚未由模型狀態管理員註冊,導致事務失敗以及其他問題...... – Robin 2013-05-09 15:30:53