【发布时间】:2017-06-24 11:19:06
【问题描述】:
我对 Ember 比较陌生,一直在努力构建一个简单的 CRUD 应用以用于学习目的。我正在使用 localstorage-adapter 来模拟后端。由于 Ember Inspector 在不同的页面上显示不同的数据,我的调试非常糟糕。
现在我拥有完整的 CRUD 功能,除了更新。假设我创建了一首新歌曲 (S1),它是专辑 (A1) 的一部分。我可以将 S1 更改为属于另一个相册 (A2),即使我刷新它也会保存并保留在本地存储中。
现在,如果我决定要将 S1 的相册改回 A1,它将保存并显示在显示页面上,但如果我刷新,相册将恢复为 A2。如果我去编辑页面,S1的专辑被列为A2。如果我在编辑页面上刷新,它会更改为 A1,但即使我单击保存,它也会在显示页面上显示 A1,但如果我刷新或返回编辑,它会返回 A2...我觉得这特别奇怪因为它确实在初始编辑尝试时正确保存(并在页面重新加载时持续存在)。无法正确保存是后续的编辑尝试。
一首歌有一个标题并且属于一个专辑。
歌曲控制器
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
updateValue(value) {
this.set('model.song.newAlbum', value)
},
updateSong(model) {
this.store.findRecord('song', model.get('id'))
.then(song => {
if (song.get('newAlbum')) {
this.store.findRecord('album', song.get('newAlbum'))
.then(album => {
song.set('album', album);
album.save();
})
}
song.save();
})
.then(() => this.transitionToRoute('songs.show', model.get('id')));
}
}
});
【问题讨论】:
-
进一步说明问题:当我在不同的页面上刷新时,数据会发生变化。如果我去我的主页并清空缓存+硬重新加载,数据看起来是正确的。 S1 属于 A1。如果我然后导航到 S1 的编辑页面或 A2 的显示页面,数据会更改并且 S1 现在属于 A2。这导致我的应用程序出现许多其他问题。例如,如果我移动一些东西然后删除,在某个时候,某个页面会中断,因为它试图为不存在的东西获取数据记录(并且它应该不再与之有关系)。
-
如果您使用 catch() 将错误处理程序添加到您的 save() 调用中,它会显示更多信息吗? guides.emberjs.com/v2.13.0/models/…
-
我在控制台中添加了一个catch。记录错误,但没有记录任何内容。
标签: ember.js local-storage ember-data