0

这是我的 Ember 数据模型:

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”模型,它们是侧载选项。

我遇到的问题是,在将“hasMany”添加到模型中之后,我无法再在商店中查询这样的选项:

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

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

当使用 chrome 检查器并在 ALL Exceptions 上中断时,它会在 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"

此行中的“类型”是“未定义”。

我在这个 hasMany 关系上做错了什么?

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

4

1 回答 1

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),但我不确定自引用树类型结构。

于 2013-09-18T06:42:44.697 回答