确定是否hasMany - > belongsTo项目已在Ember.js中创建

时间:2013-12-13 14:54:45

标签: ember.js ember-data has-many

我正在使用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。

1 个答案:

答案 0 :(得分:1)

Get belongsTo ID without fetching record

我不确定我是否同意这条路线,但您可以从数据对象中抓取它

item.get('data.training_resource.id')