侧载模型之间的HasMany关系

时间:2013-09-17 02:38:48

标签: ember.js ember-data

这是我的Ember-Data模型:

Lrt.Option = DS.Model.extend({
    option_relation_value:  hasMany('option')
});

以下是JSON的一个示例:(为了这个问题而缩短了)

{
    "optionGroups": [], 
    "optionSubGroups": [
        {
            "id": "3",  
            "optionType": [
                "80", 
                "81", 
                "82", 
                "83", 
                "84", 
                "248", 
                "278"
            ],
            "title": "Option Group for 80"
        }
    ], 
    "options": [
        {
            "id": "45", 
            "option_relation_value": [
                "80"
            ]
        },
        {
            "id": "80",
            "option_relation_value": []
        }
    ]
}

还有“OptionGroup”和“OptionSubGroup”模型,它们是./ / p>中的侧载选项

我遇到的问题是,在将'hasMany'添加到模型中之后,我再也无法查询商店中的选项,如下所示:

this.get('store').find('option')

它只返回“0”,但是在Ember Inspector中,我得到了400多个条目,所以我知道加载了数据。

使用chrome检查器并在所有例外中断时,它会在以下行的Ember-Data第2246行中断:

2246: Ember.assert('The id ' + id + ' has already been used with another record of type ' + type.toString() + '.', !id || !idToRecord[id]);

错误是:

"Cannot call method 'toString' of undefined"
此行中的

“type”是'undefined'。

我做错了什么与很多关系?

我正在使用Ember-Data 1.0 Beta 2.

1 个答案:

答案 0 :(得分:0)

从技术上讲,这不是侧载,它更像是嵌套加载。这可能与它有关。

对于真正的侧面加载,你需要一个像这样的结构作为你的外部SON响应:

{
  "option" : {
    "id" : 3,
    ...
    "options" : [45,80]
  }
  "options" : [
    { "id":45 , ... },
    { "id":80 , ... }
  ]
}

以下是有关JSON约定的文档:http://emberjs.com/guides/models/connecting-to-an-http-server/#toc_json-conventions comments是边加载的示例。

我知道这适用于单独的模型结构(post-> comment),但我不确定自引用树类型结构。