如何让Backbone.js Collection只在内存中存活(不存在)?

时间:2012-08-04 14:07:33

标签: javascript collections backbone.js

使用Backbone.js,我使用Collections在客户端和Ruby服务器之间获取和同步数据。这很好用。

现在我想用它来将数据存储在内存中(在目前的情况下,它将是购物车中的文章集合)。

有没有办法在服务器上或本地存储中保留数据的情况下执行此操作,即。集合只存在于记忆中吗?

每当我尝试将集合的url属性设置为空值时,我得到一个未捕获的TypeError:无法调用方法'create'of null 。所以...我想这不是正确的方法!

如果这不可能,那么让server和localStorage在同一个应用程序中处理不同类的最佳设计是什么?

1 个答案:

答案 0 :(得分:2)

一开始很简单,只是不要使用fetch()来填充集合,而是使用reset()。检查reset() documentation

但也许你开始遇到Collection.create()Model.destroy()等问题。所以你必须小心使用这种方法..也许你可以使用Collection.add()而不是Collection.create(),但我看不到Model.destroy()的良好替代。

我认为解决问题最优雅的方法应该是为内存Collection和Model重写sync()方法。

这是一个非常猜测,写在空气中:

// code simplified and no tested
var MemoryCollection = Backbone.Collection.extend({
  sync: function( method, model, options ){
    options.success.apply();
  }
})

但也许它可以帮助你开始朝着这个方向努力。

如果这样做,您仍然必须使用Collection.reset()而不是Collection.fetch()