Ember Data,有没有更新

时间:2013-04-07 00:28:22

标签: ember.js ember-data

不能相信这么简单的东西给了我这么多的傻瓜!无论如何,我有两个模型:

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')让篮子恢复正常。但是,basket.get('fruits')为空,它永远不会更新。

在篮子中指定fruit_ids JSON不是一个可接受的解决方案,因为在实际的实际应用中,一个篮子可能有数千到数百万个水果,用户不需要全部取出它们。

我已尝试在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!

1 个答案:

答案 0 :(得分:0)

我遇到了rootState.loaded.updated.uncommitted的问题。这里的问题是ember-data在该状态下没有为loadedData事件提供处理程序。不幸的是,没有简单的方法来添加事件,但我设法通过复制状态的原始定义所在的闭包来实现。你可以在这里找到更多细节

http://discuss.emberjs.com/t/extending-ember-data-states/838

这里有工作代码:

https://gist.github.com/pzuraq/5304796

我现在遇到与hasMany关系类似的问题,所以我将尝试实现这一点,看看我是否无法使其正常工作。如果我的结果有任何进展,我会告诉你。