2013-11-15 42 views
12

Ember Data現在的主要問題是,當我更改關係(hasMany或belongsTo)時,父級不會變髒。當我在Ember-Data中更改hasMany/belongsTo關係時,如何使父項變髒?

我需要這個,因爲:

  • 我取決於isDirty屬性顯示保存/取消按鈕
  • 的hasMany和屬於關聯ID與父送,所以其實家長IS髒。

另外,當我回滾父級時,只有belongsTo關係被恢復。 hasMany模型保持不變。

我發現this issue說的是dirtyRecordsForHasManyChange掛鉤,但這似乎並不存在於Ember Data v1(我使用的是v1.0.0-beta.3)。

我該如何做到這一點?

謝謝。

回答

4
this.get('model').send('becomeDirty'); 

應該這樣做。只要發送給父母模型變得糟糕。

10

對於一個belongsTo我添加了一個觀察者。

例如在我的我有一個belongsTo省的人。在我的表格中,我爲各省選擇了一個餘燼選擇。在Person模型我添加此觀察者......

provinceChanged: function() { 
    this.send('becomeDirty'); 
}.observes('province') 

我也是根據isDirty用於顯示/隱藏保存/取消按鈕,和而觀察者在標記記錄做了很好的工作髒,如果我點擊取消,我會回滾,但我也需要將記錄標記爲乾淨。我在取消操作中的人員控制器中執行此操作。

cancel: function() { 
    this.get('model').rollback(); 
    this.set('isEditing', false); 
    this.get('model').adapterWillCommit(); 
    this.get('model').adapterDidCommit(); 
} 

這一切似乎工作得很好。

對於另一個項目上的hasMany,我們在控制器上使用了一個計算屬性。

isThisOrChildrenDirty: function() { 
    return this.get('isDirty') || this.get('authors').get('isDirty'); 
}.property('isDirty','[email protected]') 

然後,不是檢查isDirty,而是檢查isThisOrChildrenDirty。

希望有幫助。

+1

嘿spDuchamp,我試過你hasMany關係的第一個代碼示例。它可以工作,但是我的父記錄在加載父記錄後會立即變色。我想知道是否有辦法只在孩子改變時染上父母記錄,而不是當關系最初被填充時。 –

相關問題