【发布时间】:2013-12-13 14:54:45
【问题描述】:
我正在使用 Ember:1.3.0-beta.2 和 Ember 数据:1.0.0-beta.2
这是我的设置:
型号
Rise.User = DS.Model.extend({
//....
user_training_plans: DS.hasMany('training_plan', { async: true }),
user_training_histories: DS.hasMany('training_history', { async: true }),
});
Rise.TrainingHistory = DS.Model.extend({
//....
user: DS.belongsTo('user', { async: true }),
training_resource: DS.belongsTo('training_resource', { async: true })
});
Rise.TrainingPlan = DS.Model.extend({
//....
user: DS.belongsTo('user', { async: true }),
training_resource: DS.belongsTo('training_resource', { async: true })
});
在控制器操作中,我试图将训练资源从用户的训练计划“移动”到训练历史记录。我想在添加之前确定培训资源是否已添加到培训历史记录中。
我想做这样的事情,目前正在训练计划中
markCompleted: function(trainingPlanItem) {
completed_training_resource_id = trainingPlanItem.get('training_resource.id');
this.controller.get('user_training_histories').then( function(user_training_histories) {
var already_exists = user_training_histories.any( function(item) {
var item_id = item.get('training_resource').get('id');
if (item_id == completed_training_resource_id) {
return true;
}
});
// ...continues
});
}
当然,item.get('training_resource').get('id'); 会在未获取数据的情况下返回一个 promise,因此此 if (item_id == completed_training_resource_id) 比较行无法正常工作。
有没有办法运行any 并在里面使用promise?或者有没有办法在不加载培训资源的情况下查看training_resource_id?这是belongs_to 关系,因此从服务器获取训练资源id。
【问题讨论】:
-
我认为您应该能够访问您的 user_training_history 中的 training_resource_id,如下所示:item.get('training_resource_id')
-
不幸的是,该值是
undefined... 不过,我应该能够访问该值是有道理的,因为我的服务器将关联的 id 传递给了 Ember。 -
我还没有使用过那个 ember-data 版本。您是否尝试过 trainingResourceId ?如果您在模型中定义该属性怎么办?,也许模型需要它来映射它
-
也尝试过,结果相同。我可以在模型中定义该属性,并且最终可能会走这条路,但我很沮丧,因为 Ember 已经知道该模型 id 是什么并且已经将它保存在某个地方。
标签: ember.js ember-data has-many