1

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 失败。难道我做错了什么 ?什么必须是正确的方法/不可能做到这一点?

4

1 回答 1

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') } );
于 2013-04-20T16:12:55.343 回答