ember.js - Ember 数据,hasMany 没有更新

标签 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_id。然后稍后我取了一个 basket_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!

最佳答案

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

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

这里给出了工作代码:

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

我现在遇到了与 hasMany 关系类似的问题,所以我将尝试实现它,看看我是否无法让它工作。如果我这边有任何进展,我会通知您。

关于ember.js - Ember 数据,hasMany 没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857527/

相关文章:

ember.js - 在 Ember 中建模双向对称关系

ember.js - 非 RESTful 环境中的 Ember 数据

javascript - Ember 数据 RestAdapter 嵌入了 hasMany

ember.js - Ember-cli 默认生成组件集成测试

Ember.js pre4 多重嵌套路由

javascript - ember简单例份验证验证回调问题

ember.js - Uncaught Error : Attempted to handle event `loadedData` while in state rootState. loaded.updated.uncommitted

javascript - EmberData unloadAll 不适用于 IE8。适用于 Chrome/FireFox

javascript - 简单的Ember Controller 没有输出

javascript - get 'store' 在我的适配器中未定义