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

mat*_*rns 5 local-storage ember.js ember-data

我定义了以下模型:

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

App.Comment = DS.Model.extend({
  message: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)

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

...
"o3duh":{
    "id":"o3duh",
    "title":"How to write Ember",
    "comments":[
        "jf0a2"
    ]
}
...
Run Code Online (Sandbox Code Playgroud)

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

...
"o3duh":{
    "id":"o3duh",
    "title":"How to write Ember",
    "comments":[
        {
            "message":"First!"
        }
    ]
},
"6kudl":{
    "id":"6kudl",
    "title":"Learning Ember is painful",
    "comments":[
    ]
}
...
Run Code Online (Sandbox Code Playgroud)

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

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

我不确定问题是否与ember-data或localstorage适配器有关.

mat*_*rns 1

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

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

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