如何在本地存储中存储包括所有模型的“集合”? (Backbone.js的)

时间:2015-07-28 14:52:09

标签: javascript jquery backbone.js local-storage

我在外部fetch()函数中读取了一个大的xml文件,这很安静。我的问题是,如何将已填充的集合保存到本地存储?如果本地存储已经存在,我该如何测试?否则,fetch()将被执行。 我在哪里需要在集合中添加代码? save()localStorage: new Backbone.LocalStorage("test_storage")

此示例显示了一小段代码:

    var test_collection = Backbone.Collection.extend( .. );
    var test_collection_view = Backbone.View.extend( .. ); 


    //--------------------------------------
    // external fetch
    //--------------------------------------             
    function fetch(){
       return $.ajax({
           url: 'TestInterface.xml',
               method: 'GET',
          dataType: 'xml',
          success: function(response_xml) {

             ... //parse data to test_collection

          }//end success
       });//end ajax
    }//end fetch



    //--------------------------------------
    // Initialize
    //--------------------------------------
    $(document).ready(function(){

        $.when( fetch() ).done(function() {            
            var VIEW = new test_collection_view({collection: test_collection});
        });//end when
     });//end ready

更新:

我还可以推荐这个用于延迟的进一步步骤:

Return deferred promise object and resolve it

1 个答案:

答案 0 :(得分:2)

您可以使用JSON.stringify()保存您的收藏:

test_collection.fetch({
  success: function(collection, response) {
    // Store an array containing the attributes hash of each model
    // in the collection.
    var collectionJSON = collection.toJSON();

    // Store the collection as a JSON string.
    localStorage.setItem('collection', JSON.stringify(collectionJSON));
  }
});

然后您可以使用以下方法检索您的收藏数据:

var collectionString = localStorage.getItem('collection');
var collection = JSON.parse(collectionString);

检查集合是否已存储:

if (localStorage.getItem('collection') !== null) {
  // ...
}

实现此目标的最佳方法是在fetch()例程中。首先检查是否存储了集合,如果是,则返回,否则获取它。