【发布时间】:2014-01-18 15:50:16
【问题描述】:
我有一个 hasMany / belongsTo 关系
App.Appointment = DS.Model.extend({
employee: belongsTo('employee', { async: true})
});
App.Employee = DS.Model.extend({
appointments: hasMany('appointment', { async: true})
});
我有一个简单的表格,可以让我创建约会
var appointment = {
employee: employee (another ember-data model)
}
this.store.createRecord('appointment', appointment).save().then(function(apt) {
self.get('target').transitionTo('day.index');
}
如果我执行上述操作,我的“员工”数组永远不会正确显示相反的内容(即,当我稍后执行诸如 employee.get('appointments') 之类的操作时,它不会反映新的约会;
我已经能够通过以下方式“解决”这个问题
this.store.createRecord('appointment', appointment).save().then(function(apt) {
employee.get('appointments').pushObject(apt);
employee.save();
self.get('target').transitionTo('day.index');
}
我不喜欢这个有两个原因
我觉得如果我正确连接了 ember 数据,它应该只是 “知道”我已经添加了与相关员工的新约会(如 我看到它越界了)
这会强制对我的 hasMany 进行“查找”(因此它会触发一个请求 要求员工适应 - 经常弄乱“如何”的范围 许多“我想在给定的上下文中显示的apts)。
我的关系设置正确吗?或者这是 ember-data 1.0 beta 4/5 中的错误?
我目前正在使用 ember-data 1.0 beta 4 和 ember.js 1.3.1
【问题讨论】:
-
很遗憾听到这个消息,有点希望inverses on relationships 能够从 ember-data 1.0 之前解决这些类型的问题。如果您像文档中建议的那样明确指定反向关系,它是否有效?
-
这只适用于非异步。异步有点有趣,因为他们不想在您请求记录之前获取记录。然后如果你注入一个项目,你如何表示你想要新记录而不是那个记录
-
这更像是一个困境而不是一个错误。我不确定是否适合所有解决方案。
-
那么短期内我可以手动添加到 didCreate 中的 RecordArray 的折衷方案是什么(不获取 hasMany 关系?)。如果我需要接触私有 API 直到得到核心团队的喜爱——我现在愿意接受
-
对于任何可能跟随的人 - 这解决了上面的#2(显然仍然是一个黑客)employee.get('data').appointments.pushObject(apt);
标签: ember.js ember-data