【问题标题】:EmberJS: Creating record which has belongsToEmberJS:创建具有belongsTo的记录
【发布时间】:2014-02-01 07:56:46
【问题描述】:

让我用帖子和评论来描述我的问题。在我的 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
      });
    }
  }
});

但是,我收到一条错误消息:Uncaught TypeError: Cannot read property 'post' of undefined

我如何声明这种关系?谢谢。

编辑: 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);
};

编辑:问题解决了!

问题是我给了注释一个叫做数据的属性。该属性与内部余烬冲突。删除它使我上面的代码可以正常工作。

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案1】:

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

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

    您可能在 createRecord 范围内遇到了与“this”关键字有关的问题

    更新

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

    【讨论】:

    • 你好托兰!对不起,我实际上是在你建议的 createRecord 函数之前声明它,但是当我复制这些东西时一定错过了它。所以你是对的。我应该在我的问题中解决这个问题。此外, this.get('content') === this.get('model') 返回 true,因此它们是相同的。你还有其他线索吗?非常感谢您的观看!
    • 我知道你没有在上面显示,但你确定你的关系是嵌入的而不是异步的?
    • 我只问因为像你上面显示的异步“设置”被破坏了github.com/emberjs/data/issues/1542
    • 关系不是异步的。当我在我的问题中提出它时,我已经宣布了它。我尝试在我的评论模型中添加post: belongsTo('post', { embedded: 'always' }),但错误是一样的。
    • 嘿托兰,问题解决了。并且修复不是我最初的想法,这里的任何人都无法弄清楚,因为我没有在评论模型中包含除 belongsTo 之外的其他属性。我有一个名为data 的属性。这与内部 ember 数据有冲突。很抱歉给您带来麻烦。我会发布一个编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多