在计算关系中有许多关系未定义无法读取属性'拒绝'未定义的

时间:2014-11-24 19:58:44

标签: ember.js ember-data

鉴于我有以下

模型

var Artistecontract = ErrorManaged.extend({
  name: DS.attr('string'),
  email: DS.attr('string'),
  signatoryEmail: DS.attr('string'),
  address: DS.attr('string'),
  engagements: DS.hasMany('engagement', { async: true }),
  artisteproject: DS.belongsTo('artisteproject', { async: true }),
});

控制器

var ArtistecontractEngagementsController = Ember.ObjectController.extend({
  availableEngagements: function () {
    var engagements = this.get('engagements');
    return this.get('artisteproject.engagements').reject(function (engagement) {
      return engagements.contains(engagement)
    });
  }.property('artisteproject.engagements', 'engagements')
});

路线

var ArtistecontractEngagementRoute = AuthenticatedRoute.extend({
  model: function(params) {
    return this.store.find('artistecontract', params.id);
  },
  actions: {
    include: function (artisteproject, engagement) {
      artisteproject.get('engagements').then(function (engagements) {
        engagements.pushObject(engagement);
        artisteproject.save();
      });
    }
  }
});

当我访问availableEngagements属性时,我会收到

Cannot read property 'reject' of undefined

我想要做的是从艺术家项目中获取一系列尚未属于参与属性的参与。

我做错了什么?或者有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

您正在.reject上调用this.get('artisteproject.engagements'),但错误消息告诉您this.get('artisteproject.engagements')未定义,这意味着

  1. this.get('artisteproject')未定义,或
  2. this.get('artisteproject.engagements')未定义。
  3. 根据您发布的代码,您从未在控制器上定义artisteproject属性。在Ember中,从路由的model挂钩返回的任何内容都将设置为关联控制器的model属性。因此,在您的控制器代码中,请尝试以下方法:

    this.get('model.engagements').reject...
    

答案 1 :(得分:0)

我必须让订婚成为合同承诺的一部分

  _this.store.find('artistecontract', _this.get('id')).then(function (artistecontract) {
    return Ember.RSVP.all([
      artistecontract.get('engagements'),
      artistecontract.get('artisteproject')
    ]).then(function(){
      return artistecontract;
    });
  })