2013-04-07 112 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关系类似的问题,所以我要尝试实现这一点,看看我能不能得到它的工作。如果我的目标有任何进展,我会告诉你。