如何获得Backbone.js收藏集只存在于内存中(未持久化)

How to get a Backbone.js Collection live only in memory (not persisted)?

本文关键字:内存 持久化 于内存 存在 Backbone 何获得 js 收藏      更新时间:2023-09-26

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

现在我还想使用它来将数据存储在内存中(在本例中,它将是购物车中的文章集合)。

有没有一种方法可以在不将数据持久化到服务器或本地存储的情况下做到这一点,即让集合只存在于内存中?

每当我试图将集合的url属性设置为null值时,我都会得到一个Uncaught TypeError:无法调用null的方法"create"。所以…我想这不是正确的做法!

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

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

但也许你开始遇到Collection.create()Model.destroy()等问题。所以你必须小心使用这些方法。。也许你可以用Collection.add()代替Collection.create(),但我认为Model.destroy()没有很好的替代品。

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

这是一个很好的猜测,写在空气中:

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

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

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