【问题标题】:createRecord for one-to-one relationship fails in ember-data RC1 (ember data revision 11)ember-data RC1(ember 数据修订版 11)中一对一关系的 createRecord 失败
【发布时间】:2013-02-20 11:11:21
【问题描述】:

createRecord 永远不会创建 belongsTo 对象。

Post-> hasOne -> Comment 存在这种关系并且评论嵌入在帖子中总是的情况下,是否有任何解决方法可以创建子模型对象。

这适用于Post -> hasMany -> Comments(如在 ember-data-example 中。需要帮助,我们遇到了这个问题。

    App.Test  = DS.Model.extend({
      text: DS.attr('string'),
      contact: DS.belongsTo('App.Contact')
    });
    App.Contact  = DS.Model.extend({
      id: DS.attr('number'),
      phoneNumbers: DS.hasMany('App.PhoneNumber'),
      test: DS.belongsTo('App.Test')
    });
    App.PhoneNumber = DS.Model.extend({
      number:  DS.attr('string'),
      contact: DS.belongsTo('App.Contact')
    });

    App.RESTSerializer = DS.RESTSerializer.extend({
    init: function() {
      this._super();

    this.map('App.Contact', {
      phoneNumbers: {embedded: 'always'},
      test: {embedded: 'always'}
    });
   }
});


/* in some controller code */
this.transitionToRoute('contact', this.get('content'));

以下代码行:

this.get('content.phoneNumbers').createRecord();

以下代码行失败:

 this.get('content.test').createRecord();

这是错误:

Uncaught TypeError: Object <App.Test:ember354:null> has no method 'createRecord'

因此 hasMany 与 createRecord 一起使用,但 1:1 失败。难道我做错了什么 ?什么必须是正确的方法/不可能做到这一点?

【问题讨论】:

  • @adrien coquio 谢谢,关于这个问题的任何线索?
  • 我们没有足够的信息来正确查看您的问题。也许您可以尝试写一个jsfiddle 来重现问题?或者添加一些更明确的代码示例?
  • @adrien coquio 希望我的编辑对您有所帮助。寻求帮助,我们陷入了困境。

标签: ruby-on-rails mongodb ember.js ember-data


【解决方案1】:

hasMany 关系用DS.ManyArray 表示。此数组默认为空,但仍公开createRecord 方法。

belongsTo 关联只是对记录的引用。默认为null。所以你没有任何方法可以调用它。

在您的情况下,您希望首先创建一条记录,然后将其分配给另一条记录。

this.set('test', App.Test.createRecord()); // the controller is a proxy to your model, no need to use content

或者您可以将联系人分配给新的App.Test 记录

App.Test.createRecord( { contact: this.get('content') } );

【讨论】:

  • 我们在层级较深的 NoSQL 后端遇到了更多麻烦。如果对象嵌套太深会出现问题,我们需要将对象实例化到 n 层深。相反,我们采取了一种方式,我们现在保留 Ember Data DS Objects 作为我们与后端 Rails+Mongo 的主要交互,将所有第一级对象(在我们的示例中为联系人)作为自定义对象,使用 DS.Trasnforms 将它们反映为 Ember对象。对于所有复杂的东西,我们在 Ember 对象下进行操作,并将其写回 Ember 数据。我们遇到了很多关于侧载和其他问题的问题。不过非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2013-01-10
  • 2014-01-22
  • 2015-02-21
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多