使用Backbone.js,我使用Collections在客户端和Ruby服务器之间获取和同步数据。这很好用。
现在我想用它来将数据存储在内存中(在目前的情况下,它将是购物车中的文章集合)。
有没有办法在服务器上或本地存储中保留数据的情况下执行此操作,即。集合只存在于记忆中吗?
每当我尝试将集合的url属性设置为空值时,我得到一个未捕获的TypeError:无法调用方法'create'of null 。所以...我想这不是正确的方法!
如果这不可能,那么让server和localStorage在同一个应用程序中处理不同类的最佳设计是什么?
答案 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()
。