使用hasMany在Ember中创建记录时出错

时间:2014-04-30 23:23:39

标签: javascript ember.js ember-data

我尝试创建一个具有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

1 个答案:

答案 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"
});

那应该解决你的问题。