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

Ember.js 在计算关系中有许多未定义的关系无法读取属性';拒绝';未定义的,ember.js,ember-data,Ember.js,Ember Data,鉴于我有以下几点 模型 控制器 var ArtistecontractEngagementsController = Ember.ObjectController.extend({ availableEngagements: function () { var engagements = this.get('engagements'); return this.get('artisteproject.engagements').reject(function (engagem

鉴于我有以下几点

模型

控制器

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')
});
路线

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

Cannot read property 'reject' of undefined
我想做的是从artisteproject中获取一系列尚未包含在“约定”属性中的约定


我做错了什么?或者有更好的方法来执行此操作。

您正在呼叫
。拒绝
此.get('artisteproject.engagements')
,但错误消息告诉您
此。get('artisteproject.engagements')
未定义,这意味着

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

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

    我必须把约定作为合同承诺的一部分

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

    有趣的是,当我将this.get('artisteproject')或this.get('artisteproject.engagements')传递给视图时,它们确实被定义了。我试了试模型。还有,不走运:(在这些行之前添加一个
    调试器
    ,然后查看它们的计算结果。
    this.get('model.engagements').reject...
    
      _this.store.find('artistecontract', _this.get('id')).then(function (artistecontract) {
        return Ember.RSVP.all([
          artistecontract.get('engagements'),
          artistecontract.get('artisteproject')
        ]).then(function(){
          return artistecontract;
        });
      })