我尝试创建一个具有oneToMany关系的记录,如下所示:
App.Models.Esnode = DS.Model.extend({
nodeUrl: DS.attr('string'),
nodeState: DS.attr('string'),
indices: DS.hasMany(App.Models.Index)
});
并且
App.Models.Index = DS.Model.extend({
name: DS.attr('string')
});
在ApplicationRoute的功能模型中,我这样做:
this.store.createRecord(App.Models.Esnode, {nodeUrl: "http://192.168.1.13:9200"});
出现错误:
Error while loading route: TypeError: Cannot read property 'links' of null
在第5938行的Ember数据代码中,方法reloadHasManys:
if (this._data.links && this._data.links[name]) { return; }
事实上this._data是未定义的,但不应该是因为在createRecord方法中此时尚未初始化数据。我检查了我的映射,尝试了不同的东西,但没有任何效果。我没有发现这个问题。我做错什么了吗。
我在Ember的1.5.1和Ember数据的1.0.0-beta.7.f87cba88
答案 0 :(得分:0)
您应该在App命名空间中定义模型,并按名称引用任何关系,而不是实际变量,如下所示:
App.Esnode = DS.Model.extend({
nodeUrl: DS.attr('string'),
nodeState: DS.attr('string'),
indices: DS.hasMany('index')
});
然后在创建记录时,传入您正在创建的记录类型的字符串名称,如下所示:
this.store.createRecord('esnode',{
nodeUrl: "http://192.168.1.13:9200"
});
那应该解决你的问题。