EmberJS:创建属于的所有记录

时间:2014-01-13 14:21:35

标签: javascript ember.js ember-data

让我用帖子和评论来描述我的问题。在我的post_controller中,我希望为当前帖子创建一条评论的新记录。这样做的余烬是什么?

关系设置如下:

App.Post = DS.Model.extend({
  comments: hasMany('comment'),
});

App.Comment = DS.Model.extend({
  post: belongsTo('post')
}); 

在我的post_controller里面我想创建一个记录。我在一个从模板触发的动作中有这个:

App.PostController = Ember.ObjectController.extend({
  ...
  actions: {
    createComment: function() {
      var post = this.get('model'); // Edit: Forgot that I had this declared outside createRecord
      var comment = this.store.createRecord('comment', {
        content : "content",
        post : post // This is where the problem is
      });
    }
  }
});

但是,我收到一条错误消息:未捕获的TypeError:无法读取未定义的属性“post”

我如何宣布这种关系?感谢。

修改 ember-data错误来自ember-data.js中的内部函数:

return Ember.computed(function(key, value) {
    var data = get(this, 'data'),
        store = get(this, 'store'), belongsTo, typeClass;

    if (typeof type === 'string') {
      typeClass = store.modelFor(type);
    } else {
      typeClass = type;
    }

    if (arguments.length === 2) {
      Ember.assert("You can only add a '" + type + "' record to this relationship", !value || value instanceof typeClass);
      return value === undefined ? null : value;
    }

    belongsTo = data[key]; // ERROR OCCURS HERE! 

    if (isNone(belongsTo)) { return null; }

    store.fetchRecord(belongsTo);

    return belongsTo;
  }).property('data').meta(meta);
};

编辑:问题解决了!

问题在于我发表评论称为数据的属性。该属性与内部余烬相冲突。删除它使我的代码上面工作正常。

1 个答案:

答案 0 :(得分:0)

如果你在createRecord之外声明你的帖子(即在var comment = line之上)

var postModel = this.get('model');

您可能在createRecord范围

中遇到“this”关键字问题

<强>更新

另外,对于this.get('model')和this.get('content')(来自该范围之外),你得到相同的结果吗?