2013-08-25 43 views
0

我正在編寫一個Ember應用程序,它允許用戶修改數據並自動提交對後端的更改,而無需單擊任何「保存」按鈕。我現在面臨一個奇怪的問題時,這個代碼Ember數據:何時自動提交更改?

record.set(key, newValue); 
record.get('store').commit(); 

commit()方法的記錄添加到updated桶前被先叫。如果我遲疑commit()

record.set(key, newValue); 
setTimeout(function() { 
    record.get('store').commit(); 
}, 1); 

它工作完全正常,但不覺得自己是一個正確的方法做事的灰燼。是否有任何事件通知記錄準備好保存?

+0

你怎麼知道數據沒有保存。你做了record.set('foo','bar'); 。record.get( '存儲')提交();和record.get('foo');返回undefined? –

回答

0

它工作得很好,但不覺得在Ember中做事是正確的。是否有任何事件通知記錄準備好保存?

有一個標誌,你可以設置在觀看,這是isDirty屬性,指示記錄有這些還沒有COMMITED局部變化,例如:

App.MyModel = DS.Model.extend({ 
    ... 
    isDirtyChanged: function() { 
    if(this.get('isDirty')) { 
     this.get('store').commit(); 
    } 
    }.observes('isDirty') 
}); 

調用,然後進行:

record.set(key, newValue); 

isDirtyChanged因爲觀察者的我們已經建立驗證isDirty財產,並承諾,如果這是真的被自動調用。

你也可以在這裏獲得更多的生命週期事件和屬性:http://emberjs.com/guides/models/model-lifecycle/

參見這裏進行了demo(它有一些其他的東西,但請只專注於Author模型和觀察者如何設置,還在PostControllerupdate函數中)在作者名稱下方的輸入字段中輸入內容,然後按Update按鈕,現在觀看控制檯日誌。

希望它有幫助。