一对一关系的createRecord在ember-data RC1(ember data revision 11)中失败

时间:2013-02-20 11:11:21

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

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失败。难道我做错了什么 ?什么是正确的方式/不可能这样做?

1 个答案:

答案 0 :(得分: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') } );