Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 刷新时,Ember localstorage适配器具有不同的数据_Ember.js_Local Storage_Ember Data - Fatal编程技术网

Ember.js 刷新时,Ember localstorage适配器具有不同的数据

Ember.js 刷新时,Ember localstorage适配器具有不同的数据,ember.js,local-storage,ember-data,Ember.js,Local Storage,Ember Data,我对Ember比较陌生,一直在努力构建一个简单的CRUD应用程序来进行学习。我正在使用localstorage适配器模拟后端。我的调试非常糟糕,因为Ember Inspector在不同的页面上显示不同的数据 现在我有完整的CRUD功能,除了更新。假设我创建了一首新歌曲(S1),它是专辑(A1)的一部分。我可以将S1更改为属于另一个相册(A2),这样即使我刷新,也可以保存并保存在本地存储中 现在,如果我决定将S1的相册更改回A1,它将保存并显示在显示页面上,但如果我刷新,相册将恢复为A2。如果我转

我对Ember比较陌生,一直在努力构建一个简单的CRUD应用程序来进行学习。我正在使用localstorage适配器模拟后端。我的调试非常糟糕,因为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')));
    }
  }
});

为了确保数据在后端(即本项目中的本地存储)上正确持久,您需要对关系进行更多的管理

您需要:

  • 将新唱片集设置为歌曲的唱片集属性-
    song.Set('album',newAlbum)
  • 保存歌曲的旧唱片集如果有人可以从
    oldAlbum.songs中删除歌曲
  • 保存歌曲:将
    song.album
    属性保留到后端
  • 保存歌曲的新专辑:将更新的
    newAlbum.songs
    保存到后端
  • 此外,我使用了,这样您就不必在函数中获取歌曲数据对象(它已解析并为您传递到模型中)

    最后,请注意,在routes/application.js中设置初始实体的推送只推送到缓存,而不是本地存储。有了这些,你会发现生活总是与之联系在一起的——不要让它把你甩了


    另外,请记住,您可以从开发人员工具中剪切和粘贴本地存储内容,以帮助调试其中的内容,而不是Ember缓存。

    要确保数据在后端(即本项目中的本地存储)正确保存,您需要对关系进行更多的管理

    您需要:

  • 将新唱片集设置为歌曲的唱片集属性-
    song.Set('album',newAlbum)
  • 保存歌曲的旧唱片集如果有人可以从
    oldAlbum.songs中删除歌曲
  • 保存歌曲:将
    song.album
    属性保留到后端
  • 保存歌曲的新专辑:将更新的
    newAlbum.songs
    保存到后端
  • 此外,我使用了,这样您就不必在函数中获取歌曲数据对象(它已解析并为您传递到模型中)

    最后,请注意,在routes/application.js中设置初始实体的推送只推送到缓存,而不是本地存储。有了这些,你会发现生活总是与之联系在一起的——不要让它把你甩了


    另外,请记住,您可以从开发人员工具中剪切和粘贴本地存储内容,以帮助调试其中的内容与Ember缓存中的内容。

    进一步说明问题:当我在不同页面上刷新时,数据会发生更改。如果我转到主页,空缓存+硬重新加载,数据看起来是正确的。S1属于A1。如果我随后导航到S1的编辑页面或A2的显示页面,数据会发生变化,S1现在属于A2。这会导致我的应用程序出现许多其他问题。例如,如果我将内容四处移动,然后在某个点上删除,某个页面将中断,因为它试图为不存在的内容获取数据记录(该记录不应再与存在关系)。如果使用catch()将错误处理程序添加到save()调用中,是否会显示更多信息?我在console.log中添加了一个catch来记录错误,但没有记录任何内容。为了进一步说明问题:当我刷新不同的页面时,数据会发生变化。如果我转到主页,空缓存+硬重新加载,数据看起来是正确的。S1属于A1。如果我随后导航到S1的编辑页面或A2的显示页面,数据会发生变化,S1现在属于A2。这会导致我的应用程序出现许多其他问题。例如,如果我将内容四处移动,然后在某个点上删除,某个页面将中断,因为它试图为不存在的内容获取数据记录(该记录不应再与存在关系)。如果使用catch()将错误处理程序添加到save()调用中,是否会显示更多信息?我在console.log中添加了一个catch,但没有记录任何错误。当我将我的函数更改为与您的函数类似并尝试进行编辑时,我收到一个错误,上面写着“错误:断言失败:找不到路由ag4g9”,其中ag4g9是我正在编辑的歌曲的id。出于某种原因,艺术家被删除了?它似乎仍然存在于本地存储中,但不存在于Ember Inspector中的数据中(取决于页面)。非常感谢你的帮助!在我看来,这可能是路由转换的一个问题,但如果没有看到更多的代码或运行一个运行最少的示例,很难说什么。你有没有可能在github上发布你的项目?当然有。事实上,我是作为一个编码挑战来进行这项工作的,并且已经提交了它。也就是说,它不能正常工作这一事实让我发疯,我仍然想找出我自己的错误。非常感谢您发布github链接!我能够让项目运行并发现问题。在苏
    import Ember from 'ember';
    
    export default Ember.Route.extend({
      model(params) {
        return Ember.RSVP.hash({
          song: this.store.findRecord('song', params.song_id),
          albums: this.store.findAll('album')
        })
      },
      actions: {
        updateSong(song) {
          if (song.get('newAlbum')) {
            //  Get the current album's Ember object as 'oldAlbum'
            song.get('album').then((oldAlbum) => {
              // Then get the new album's Ember object as 'newAlbum'
              this.store.findRecord('album', song.get('newAlbum')).then(newAlbum => {
                // Set the song's album to the new album
                song.set('album', newAlbum);
                if (oldAlbum) {
                  // Save the old album if it exists
                  oldAlbum.save();
                }
                // Save the new album
                newAlbum.save();
                // Save the song
                song.save().then(() => {
                  // Then transition to new route
                  this.transitionTo('songs.show', song.get('id'))
                })
              })
            });
          }
        }
      }
    });