簡體   English   中英

在狀態root.loaded.updated.inFlight中嘗試處理事件`willCommit`

[英]Attempted to handle event `willCommit` on while in state root.loaded.updated.inFlight

我正在通過“入門”頁面的入門教程學習如何使用EmberJS。 但是,當我進入“接受編輯”部分時,我有一個錯誤:

Uncaught Error: Attempted to handle event `willCommit` on <Todos.Todo:ember304:3> while in state root.loaded.updated.inFlight. 

Todos.TodoController.acceptChanges()的調用似乎是在觸發該錯誤。 我所指的部分是這一部分: http//emberjs.com/guides/getting-started/accepting-edits/

在閱讀了Ember的模型生命周期后 - http://emberjs.com/guides/models/model-lifecycle/#toc_in-flight-我仍然不明白為什么會出現這個錯誤。

一個解決方法是每次更改時保存模型(因此每次<input>的值都會發生變化。這樣可以正常工作但是使用HTTP API可能表現不佳(而不是燈具)。

這可能是因為BC破壞了ember-data lib中的變化嗎? 還有什么可能導致這個?


我用過的庫的版本:

jQuery:2.0.3

把手1.0.0

EmberJS:1.0.0 RC7

Ember數據:v0.13-102-g6bdebe7

在閱讀了Ember的模型生命周期后 - http://emberjs.com/guides/models/model-lifecycle/#toc_in-flight-我仍然不明白為什么會出現這個錯誤。

這不是一個錯誤,飛行中的部分說的就是這一切:

正在傳輸的記錄是已提供給適配器以保存本地更改的臟記錄。 一旦服務器確認已成功保存更改,記錄將變為干凈。

這意味着您正在嘗試更改記錄,而先前的更改使其變臟並且可能調用this.get('store').save()仍在執行中,例如等待服務器響應。 在此時間范圍內,您無法在不收到錯誤的情況下對同一記錄進行更改。

因此,一個解決方案可能是在文本框的字符發生變化之后不會觸發this.get('store').save() ,而是在焦點輸出之后,或者甚至使用顯式按鈕來保存您可以禁用的記錄直到您的服務器確認它發生了變化,這不會向服務器請求每個字符,導致由於某些延遲而導致性能低下。 希望這是有道理的。

希望能幫助到你。

我在“入門指南”中遇到了同樣的問題。 我通過檢查模型當前是否在acceptChanges保存來解決它:

acceptChanges: function() {
  var model = this.get('model')
  if (model.get('isSaving')) { return }

  this.set('isEditing', false)
  model.save()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM