2015-10-08 43 views
0

我正在尋找最好的做法Ember.JS解決以下情形:Ember.JS最佳實踐:型號VS控制器領域結合

  1. 用戶點擊的挑戰鏈接。
  2. 系統顯示挑戰列表。
  3. 用戶點擊編輯挑戰按鈕。
  4. 系統顯示編輯質詢表單。
  5. 用戶更新挑戰名稱。
  6. 用戶點擊聯賽鏈接,而沒有保存挑戰。
  7. 系統顯示聯賽列表。
  8. 用戶點擊挑戰鏈接。
  9. 系統使用更新的質詢名稱顯示質詢列表。

發生此問題的原因是,我的所有文本字段都直接綁定到挑戰模型,並且只要鍵入它就更新模型,並更新所有路線上的文本。我在編輯表單上有一個取消按鈕,在該模型上執行this.get('model')。rollback()以取消編輯。但是,如果您在頁面上的不同位置開始回滾,您可以單擊,這會變得很麻煩。

我正在考慮解決此問題的方法是將表單字段綁定到控制器屬性,並在每個路由上將模型屬性複製到setupController掛鉤上的控制器屬性。這將防止編輯影響其他路線。

我在想,如果這是在燼中的最佳做法還是有更好的方法來解決這個問題?

謝謝

+0

還有其它的方法,但它應該是足夠好做回滾在一個地方,最有可能的'willTransition'鉤。 –

+0

有些人通過創建記錄副本來解決它,只是把它扔掉而不是做回滾。它還值得注意的是,回滾將只回滾屬性而不是關係。 – Keo

回答

2

可以在deactivate路線鉤使用單回滾。然後在cancel操作中,您只能進行轉換。

// edit challenge route 
model(params) { 
    ... 
}, 

deactivate() { 
    this.modelFor(this.get('routeName')).rollback(); 
} 

PS您是否知道rollback()仍不能正常使用關係工作,並在ED 2.0降低到rollbackAttributes()

相關鏈接: https://github.com/emberjs/data/issues/2122 https://github.com/emberjs/data/issues/3273#issuecomment-110965145

+0

不,我不知道關於回滾問題,所以我應該在停用鉤子中使用rollbackAttributes? – jpoiri

+0

回滾本身沒有問題,只是溝通不暢。 Rollback重命名爲rollbackAttributes,因爲它只回滾屬性。 – Keo

+0

喬,不同意你的看法。 – artych