Javascript 无法在Backbone.localStorage插件中设置初始收集数据

Javascript 无法在Backbone.localStorage插件中设置初始收集数据,javascript,backbone.js,local-storage,backbone.js-collections,Javascript,Backbone.js,Local Storage,Backbone.js Collections,我正在使用并拥有以下收藏: var PlayersCollection = Backbone.Collection.extend({ model: Player, localStorage: new Backbone.LocalStorage("players-backbone"), }); col.localStorage.records // [] nothing 并尝试使用以下方法设置初始数据: var col = new PlayersCollection([ {

我正在使用并拥有以下收藏:

var PlayersCollection = Backbone.Collection.extend({
   model: Player,
   localStorage: new Backbone.LocalStorage("players-backbone"),
});
col.localStorage.records // [] nothing
并尝试使用以下方法设置初始数据:

var col = new PlayersCollection([
  {
    "model": "myapp.person",
    "pk": 1
  },
  {
    "model": "myapp.person",
    "pk": 2
  }
]);
但不幸的是,我的收藏中没有上述物品:

var PlayersCollection = Backbone.Collection.extend({
   model: Player,
   localStorage: new Backbone.LocalStorage("players-backbone"),
});
col.localStorage.records // [] nothing

如何基于初始收集数据初始化localStorage store?

好的,首先想到的是,Backbone.localStorage仅通过“sync”请求加载数据。这意味着,即使localStorage中存在数据,也需要调用col.fetch(),然后才能将该数据设置到集合中

对于您的特定示例,此解决方案就足够了。但是,它有自己的一套警告,如果您能够扩展您的需求,我很乐意解决这些警告:

var PlayersCollection = Backbone.Collection.extend({
   localStorage: new Backbone.LocalStorage("players-backbone"),
   initialize: function(){
       //  NOTE: Models are NOT set on Collection in initialize. Defer until ready.
       _.defer(function(){
           if(!this.isEmpty()){
               this.invoke('save');
               this.fetch();
           }
       }.bind(this));
});

var col = new PlayersCollection([
  {
    "model": "myapp.person",
    "pk": 1
  },
  {
    "model": "myapp.person",
    "pk": 2
  }
]);

col.once('sync', function(){
    console.log('col:', col.localStorage.records);
});
显然,这里的主要问题是:

  • 不直观的事件驱动初始化。这可以通过让一个工厂负责创建PlayerCollection来解决,或者通过为该集合提供另一个需要在初始化后运行的方法来解决。所有的解决方案都有点难看

  • 修改现有的本地存储数据。通过告诉集合在加载时保存,您将最终修改localStorage中已有的内容。这可以通过检查空集合来解决。但是,您可能仍然会有一些意外的结果


然而,我主要关心的是,当您的集合已经获得了它的模型时,为什么您需要从localStorage中提取。为什么不直接访问col中的模型而不是查询其记录?

我假设Backbone.LocalStorage是?是的。刚刚添加到post@Erik您既不保存也不获取模型,因此不应以任何方式考虑您的存储。你希望自动同步吗?