Backbone.js - 如何将集合保存到localStorage?

时间:2017-06-21 17:53:03

标签: javascript backbone.js local-storage

我已将Backbone.localStorage包含在我的代码中,但我似乎找不到将我的集合(或更具体地说是我的集合的属性)保存到localStorage的方法。

这是我的收藏代码:

//Collection
var Playlist = Backbone.Collection.extend({
    model: Song,
    localStorage: new Backbone.LocalStorage('playlist'),
    initialize: function(models,options) {
        _.extend(this,_.pick(options, 'currentTrack'));
    },
    url: 'metadata',
    parse: function(response){
        return response
    },
    save: function(){
        Backbone.sync('create', this, {
            succes: function() {
                console.log('Saved');
            },
            error: function(){
                console.log('There was an error');
            }
        });
    },
    currentTrack: 0,
    currentTime: 0
});

在我添加save方法之前,没有任何方法(正如我在Backbone文档中所读到的那样)。我根据this post

添加了该方法

那么,我应该怎么做呢?

1 个答案:

答案 0 :(得分:2)

Backbone集合仅用于存储模型,模型包含数据。所以我认为localStorage插件没有内置的方法来存储集合上的自定义属性。

您的属性用于保持应用程序的状态,应该是“控制器”的一部分,在主干的情况下是“视图”。视图可以直接从localStorage设置/获取。

简单如下:

saveState: function(){
  localStorage.setItem('playlist.state',JSON.stringify({
    currentTrack: this.currentTrack,
    currentTime: this.currentTime
  }));
},
retrieveState: function(){
  return JSON.parse(localStorage.getItem('playlist.state'));
}

如果需要,您可以在集合中执行相同的操作。没有理由通过骨干同步攻击backbone.localStorage插件来执行此操作。