![](/img/trans.png)
[英]ember / ember-data belongsTo and hasMany not updating as expected
[英]Ember Data, hasMany not updating
不敢相信這么簡單的東西給了我這么多的傻瓜! 無論如何,我有兩個模型:
App.Basket = DS.Model.extend({
fruits: DS.hasMany('App.Fruit')
});
App.Fruit = DS.Model.extend({
basket: DS.belongsTo('App.Basket')
});
我獲取一個id為1的籃子並且不指定任何fruit_ids。 然后我用一個1的fruit.get('basket')
獲取一個水果fruit.get('basket')
返回籃子就好了。 但是, basket.get('fruits')
是空的,它永遠不會更新。
在籃子中指定fruit_ids JSON不是一個可接受的解決方案,因為在實際的實際應用中,一個籃子可能有數千到數百萬的水果,用戶不需要全部取出它們。
我已經嘗試在App.Fruit
上添加以下App.Fruit
:
didLoad: function() {
this.get('basket').get('fruits').pushObject(this);
}
哪個適用於第一次加載。 但是,如果ember-data嘗試再次獲取數據,那么您只需:
Uncaught Error: Attempted to handle event `loadedData` on <App.Fruit:ember353:3> while in state rootState.loaded.updated.uncommitted. Called with undefined
將didLoad
更改為:
didLoad: function() {
this.get('basket').get('fruits').pushObject(this);
this.get('stateManager').send('becameClean');
this.get('stateManager').send('finishedMaterializing');
}
刪除所有錯誤。 但是,即使在ember嘗試重新獲取數據時(例如,在訪問另一條路線之后再返回),didLoad也永遠不會被再次調用。
花了好幾個小時在這上面,我無法理解這么簡單的事情如何占用我的大部分時間。 我想要做的就是在獲取新水果時更新籃子上的hasMany!
我遇到了rootState.loaded.updated.uncommitted的問題。 這里的問題是ember-data在該狀態下沒有為loadedData事件提供處理程序。 不幸的是,沒有簡單的方法來添加事件,但我設法通過復制狀態的原始定義所在的閉包來實現。你可以在這里找到更多細節
http://discuss.emberjs.com/t/extending-ember-data-states/838
這里的工作代碼是gisted:
https://gist.github.com/pzuraq/5304796
我現在遇到了與hasMany關系類似的問題,所以我將嘗試實現它,看看我是否無法使其正常工作。 如果我的結果有任何進展,我會告訴你的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.