不敢相信这么简单的事情给了我这么多的烦恼!无论如何,我有两个模型:
App.Basket = DS.Model.extend({
fruits: DS.hasMany('App.Fruit')
});
App.Fruit = DS.Model.extend({
basket: DS.belongsTo('App.Basket')
});
我拿了一个 id: 1 的篮子,并且没有指定任何fruit_ids。然后稍后我取一个篮子id为1的水果。fruit.get('basket')
返回篮子就好了。但是,basket.get('fruits')
是空的,它永远不会更新。
在篮子 JSON 中指定 fruit_ids 不是一个可接受的解决方案,因为在实际的真实应用程序中,一个篮子可能有数千到数百万个水果,用户不需要全部获取它们。
我尝试在以下位置添加以下内容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!