![](/img/trans.png)
[英]Attempted to handle event `willCommit` on while in state root.loaded.updated.inFlight
[英]Ember JS, Error while parsing Data in Transformer handeling event `didCommit` in state root.loaded.updated.uncommitted."
我在Ember Transformer中嘗試在序列化函數中解析日期時收到錯誤。
錯誤消息:“在狀態root.loaded.updated.uncommitted中嘗試處理<(DS.Model的子類)上的事件didCommit
:ember1597:8260357>。”
奇怪的是,數據被正確傳輸解析到服務器。
碼:
DS.Transform.extend({
deserialize : function(serialized) {
var array = [];
if (Ember.isArray(serialized)) {
serialized.forEach(function(item) {
if (item.feldTyp === "DATE_FIELD" && item.value) {
Ember.set(item, "value", moment(item.value, "DD.MM.YYYY"));
}
array.addObject(Ember.Object.create(item));
});
}
return array;
},
serialize : function(deserialized) {
if (Ember.isArray(deserialized)) {
deserialized.forEach(function(item) {
if (item.get('feldTyp') === "DATE_FIELD" && item.get('value')) {
item.set('value', moment(item.get('value')).format("DD.MM.YYYY"));
}
});
return deserialized;
}
return [];
}
});
行item.set('value', moment(item.get('value')).format("DD.MM.YYYY"));
導致錯誤被注釋掉錯誤消失。 我嘗試了其他一些事情,比如設置靜態值或使用Ember.set
設置值但沒有成功。 我不太清楚這里出了什么問題,因此無法想出解決方案。 有人可以幫忙嗎? 提前致謝。
編輯
解決方法:我將序列化移動到控制器中。 看起來不那么優雅,但現在起作用......
正如你所知,ember數據不喜歡在變換中使用set
。 因為數據的服務器表示通常不同於它在客戶端表示的方式。 Ember希望轉換不會修改傳入的serialized
或deserialized
serialized
值,而是返回新值。
發生此錯誤的原因是因為ember有一個狀態機來跟蹤與服務器相關的記錄狀態(請參閱http://emberjs.com/api/data/classes/DS.RootState.html )。 在這種情況下,ember很可能將記錄置於inFlight
狀態。 然后它調用transform的serialize函數。 當item.set
,ember會注意到對記錄的更改,並且無意中將記錄轉換回uncommitted
狀態。 之后,服務器響應保存請求燼誤假設成績仍然是在inFlight
狀態信號didCommit
事件,這樣的記錄可以轉移到saved
狀態。 因為uncommitted
狀態不支持didCommit
事件,所以ember會拋出錯誤。
我懷疑你可以通過重寫你的序列化函數來解決這個問題,而不是調用set
而是返回一個新的數組。
serialize : function(deserialized) {
if (Ember.isArray(deserialized)) {
return deserialized.map(function(item) {
if (item.get('feldTyp') === "DATE_FIELD" && item.get('value')) {
return moment(item.get('value')).format("DD.MM.YYYY");
}
});
}
return [];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.