5

我定义了以下模型:

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

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

如果我创建一个带有评论的帖子条目,则存储在我的浏览器本地存储中的 JSON 将评论作为一个 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 适配器上。

4

2 回答 2

1

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

你可以在这里看到我提交给原作者的拉取请求:https ://github.com/rpflorence/ember-localstorage-adapter/pull/26

希望它将被合并到 LSAdapter 项目中,或者更好的是,有人会提出更好的解决方案;)

于 2013-10-02T11:44:48.083 回答
0

我能够通过在评论上定义反比关系来解决 JSON 问题:

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

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

于 2013-09-29T21:55:49.680 回答