2017-06-21 3 views
0

私のコードにBackbone.localStorageが含まれていますが、自分のコレクション(または特に私のコレクションの属性)をlocalStorageに保存する方法が見つからないようです。Backbone.js - コレクションを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メソッドを追加する前に(私はバックボーンのドキュメントを読み込むと)どのませんでした。私はその方法を次のように追加しました。this post

どうすればいいですか?

+0

どの属性を保存しますか? –

+1

最後の2つ:currentTrackとcurrentTime – medicengonzo

答えて

2

バックボーンコレクションは、単にモデルを保存するためのもので、モデルにはデータが含まれています。ですから、localStorageプラグインにはコレクションにカスタム属性を格納する方法が組み込まれているとは思いません。

あなたの属性は、アプリケーションの状態を保持するためのもので、バックボーンの場合は「ビュー」である「コントローラ」の一部でなければなりません。そしてviewは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プラグインにハッキングする理由はありません。

+0

私は単純にそのデータをモデルの中に入れました。 –

+0

@EmileBergeronあなたは状態を保持するためだけに異なるモデルを意味します、そうですか? –

+0

はい、正確です! OPはlocalStorageを使用しており、すでにモデル属性を同期させているので、手動でlocalStorageを使用するのを避けるために、モデルの機能を持たないのはいかがですか。 –

関連する問題