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