我正在使用Ember:1.3.0-beta.2和Ember Data: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');
会返回一个承诺,因此此if (item_id == completed_training_resource_id)
比较行无法正常工作。
有没有办法运行any
并使用内部的承诺?或者有没有办法在不加载培训资源的情况下查看training_resource_id
?这是belongs_to
关系,因此从服务器获取培训资源ID。
答案 0 :(得分:1)
Get belongsTo ID without fetching record
我不确定我是否同意这条路线,但您可以从数据对象中抓取它
item.get('data.training_resource.id')