1

我们在数据访问方面有多种要求。

  • 预加载一些reference数据。
  • 我们需要参考数据才能在浏览器重启后存活下来,而不是仅仅存在于内存中以避免一直加载它。我目前正在LocalStorageAdapter为此使用。
  • 一旦我们有了它,我们希望sync changes(在后台轮询或使用Socket.IO并更新 LocalStorage 可以解决问题)
  • 还有其他更具事务性的模型,我们需要直接访问服务器并获取/保存它们。使用 RESTAdapter 之类的东西会很好。
  • 最后,有些操作应该可以工作off-line,并且以后应该同步更改。

为了使其更具体:

  • 我们pre-load向本地存储供应和“最喜欢的产品”。我们与这些人离线工作。
  • 我们需要将服务器更改同步到供应商和产品信息。
  • 如果他们搜索完整目录,则需要他们在线。
  • 离线时,我们需要允许用户在他们的购物车中添加一些东西,甚至提交和订购。我们希望将此操作排队并在他们有 Internet 连接时提交。

所以由此衍生出几个问题:

  • 有没有办法将 RESTAdapter 与 LocalStorage 结合使用?
  • 有一些 Socket.IO 支持吗?(很高兴手动完成这部分)
  • 有队列支持吗?理想情况下在 Ember 数据级别。

我知道我们将不得不手动完成很多工作并将不同的乐高积木拼在一起,但我想从经验丰富的 Ember 开发人员那里获得一些观点。

4

1 回答 1

1

你绝对可以做到这一点。就像你说的那样,你需要做很多乐高积木才能把它们放在一起。

您需要使用 RESTAdapter 和 LSAdapter 并创建一个混合体。我们在我的工作中做了一些类似的事情,但它只是一种方式(从服务器到客户端,而不是反向)。

话虽如此,我只想提出几个问题:

  1. 您计划在 localStorage 中存储多少,您是否制定了驱逐计划?对于大多数浏览器来说,本地存储通常很小,尽管在大多数浏览器中实现是相同的(直到 IE8 才实现)。IndexedDB 为您提供了更大的空间,但直到 IE 的更高版本才能实现。

  2. 根据性能需求,我建议先存储 localStorage,然后尝试持久保存到服务器,如果它可以从 localStorage 弹出,如果它没有将它留在那里供您的适配器稍后尝试。(我会考虑使用 Ember 的 schedule 或 scheduleOnce 或在运行循环中工作的许多其他方便的助手,http ://emberjs.com/api/classes/Ember.run.html#method_schedule )。

     Called by the store when a newly created record is
     `save`d.
    
     It serializes the record, and `POST`s it to a URL generated by `buildURL`.
    
     See `serialize` for information on how to customize the serialized form
     of a record.
    
    createRecord: function(store, type, record) {
    
     var data = {};
     var serializer = store.serializerFor(type.typeKey);
    
     serializer.serializeIntoHash(data, type, record, { includeId: true });
     // build up a model that knows the url, the method, and the data to post
     // store it to local storage in some queue to save
     // schedule it to save to server later, keep track of the record since you'll
     // need to update the record with new information later that could come down 
     // from the server
     return this.ajax(this.buildURL(type.typeKey), "POST", { data: data });
    },
    

老实说,我认为您可能遇到的最困难的事情是当您没有真正将其保存到服务器时如何处理 id。祝你好运

于 2013-10-19T03:52:03.543 回答