2013-04-07 158 views
3

不能相信這麼簡單的東西是給我這麼多格雷夫!無論如何,我有兩個模型:灰燼數據,沒有的hasMany更新

App.Basket = DS.Model.extend({ 
    fruits: DS.hasMany('App.Fruit') 
}); 

App.Fruit = DS.Model.extend({ 
    basket: DS.belongsTo('App.Basket') 
}); 

我拿一個ID爲1的籃子,並沒有指定任何fruit_ids。然後,我拿一個basket_id爲1的水果。fruit.get('basket')返回籃子就好了。但是,basket.get('fruits')是空的,它從不更新。

在籃下JSON指定fruit_ids不如在實際應用實際籃子可能有數千至數百萬的水果,用戶將不會需要來接他們所有可接受的解決方案。

我已經嘗試添加上App.Fruit如下:

didLoad: function() { 
    this.get('basket').get('fruits').pushObject(this); 
} 

這對於第一負載正常工作。但是,如果燼數據再次嘗試獲取數據,那麼你只得到:

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!

回答

0

我已經與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關係類似的問題,所以我要嘗試實現這一點,看看我能不能得到它的工作。如果我的目標有任何進展,我會告訴你。