【问题标题】:How to get a Backbone.js Collection live only in memory (not persisted)?如何让 Backbone.js 集合仅存在于内存中(不持久化)?
【发布时间】:2012-08-04 14:07:33
【问题描述】:

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

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

有没有办法做到这一点,而无需在服务器或本地存储中持久化数据,即。收藏只存在于记忆中吗?

每当我尝试将集合的 url 属性设置为 null 值时,我都会收到 Uncaught TypeError: Cannot call method 'create' of null。所以...我想这不是正确的方法!

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

【问题讨论】:

    标签: javascript collections backbone.js


    【解决方案1】:

    一开始很容易,只是不要使用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()

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 2014-04-25
      • 2018-08-26
      • 2011-12-19
      相关资源
      最近更新 更多