由hasMany关系定义的Ember子项突然变为嵌入式模型

时间:2013-09-18 17:40:55

标签: ember.js local-storage ember-data

我定义了以下模型:

App.Post = DS.Model.extend({
  title: DS.attr('string'),
  comments: DS.hasMany('comment')
});

App.Comment = DS.Model.extend({
  message: DS.attr('string')
});

如果我使用Comment创建一个Post条目,那么存储在我的浏览器本地存储中的JSON会引用注释作为一组ID,这些ID很有用:

...
"o3duh":{
    "id":"o3duh",
    "title":"How to write Ember",
    "comments":[
        "jf0a2"
    ]
}
...

然而,当我添加另一篇帖子时,JSON突然改变,以便嵌入评论:

...
"o3duh":{
    "id":"o3duh",
    "title":"How to write Ember",
    "comments":[
        {
            "message":"First!"
        }
    ]
},
"6kudl":{
    "id":"6kudl",
    "title":"Learning Ember is painful",
    "comments":[
    ]
}
...

为什么会这样?我能预防吗?这导致了我的问题,因为一旦它变成这种嵌入格式,重新加载页面时LSAdapter就无法读取数据。

这是一个JSBin所以你可以看到它发生在自己身上并看到完整的JSON等。要重现问题,只需创建一个帖子并添加注释,然后你就可以毫无问题地刷新页面。然后添加另一篇文章并尝试刷新页面。

我不确定问题是使用ember-data还是localstorage适配器。

2 个答案:

答案 0 :(得分:1)

我通过修改LocalStorageAdapter解决了这个问题,因此它只尝试以预期的格式保留JSON。

您可以在此处查看我提交给原作者的拉取请求:https://github.com/rpflorence/ember-localstorage-adapter/pull/26

希望它能够融入LSAdapter项目,或者更好的是,有人会提出更好的解决方案;)

答案 1 :(得分:0)

我能够通过在Comment:

上定义反向关系来修复JSON问题
App.Comment = DS.Model.extend({
  message: DS.attr('string'),
  post: DS.belongsTo('post')
});

现在有新问题,但希望这会有所帮助。