我遇到了Ember-Data事務的問題。Ember-Data事務錯誤
我有像這樣
App.MyModel = DS.Model.extend({
id: DS.attr(),
answers: DS.hasMany('App.Answer') // another model
});
然後,DS.Model它被啓動後,像這樣,在路由
model: function(){
var transaction = this.get('store').transaction();
return transaction.createRecord(App.MyModel, {
id: '1'
});
}
我有一個模型,使我的後端的請求服務器使用事務和提交。
this.get('content.transaction').commit();
意圖是答案在服務器端更新併發回給我。 如果內容尚未更新,我稱這種
this.get('content').reload();
,請求將再次發送。
這一切工作正常。如果找到id,答案將填充。
我的問題是有時候,根據我從服務器返回的內容,我必須提出另一個服務器請求。初始請求正常工作與
this.get('content.transaction').commit();
但是當我嘗試重新加載交易,我得到一個錯誤,如下
Uncaught Error: Attempted to handle event `loadedData` on <App.Answer> while in state rootState.loaded.updated.uncommitted. Called with undefined
現在,當我刪除重裝,我不再得到的錯誤,另外當我在網絡標籤下查看Chrome的控制檯時,我可以看到我想要的結果正在發回,但它們並未在我的DS模型中更新。答案是未定義的。
任何人都知道爲什麼會發生這種情況?我使用交易錯誤嗎?
編輯
Application.SearchController = Ember.ObjectController.extend({
isComplete: function() {
return this.get('content.answers.length') !== 0;
},
search: function() {
this.get('content.transaction').commit();
var record = this.get('content');
var interval = setInterval(function (controller) {
if (controller.get('isComplete')) {
controller.transitionToRoute("search.view");
clearInterval(interval);
} else {
record.reload();
}
}, 5000, this);
}
});
所以基本上一些在我的路線設置我的模型,並將它們設置爲內容所做的工作,該模型將在服務器端使用,併發送一個id返回搜索結果,然後添加到「答案」。
這項工作很好,直到找到多個結果。然後創建一個新模型,並在不同的控制器上再次調用搜索功能,使用不同的內容。這一次輪到 record.reload();
我得到錯誤 未捕獲的錯誤:嘗試處理狀態爲rootState.loaded.updated.uncommitted的事件loadedData
。用undefined調用
所以服務器仍然響應正確的結果,但「答案」不在客戶端更新。
我試過克勞赫斯特先生,但它沒有工作 – johnjo 2013-05-02 10:26:40
你最後是正確的克勞赫斯特先生,我不得不重做我的路由器.. – johnjo 2013-05-21 10:27:02