gpt4 book ai didi

ember.js - 使用 EmberData 在本地存储中缓存远程数据

转载 作者:行者123 更新时间:2023-12-02 00:21:49 24 4
gpt4 key购买 nike

我有一个关于使用 Ember 加载和缓存远程对象的问题。我正在开发一个 Ember 应用程序,它通过 REST API 使用服务器端存储。一些获取的数据很少发生变化,因此每次应用程序加载时都从服务器获取数据是不必要的。但这对于需要离线工作并仍将数据保存到服务器的应用程序来说也是一个问题。

Ember Data 有一个内置的存储适配器,用于通过 REST API 持久化模型,并且有 an adapter for Local Storage以及(正如下面肯指出的那样)。问题(如果这是一个问题的话)是一个模型只有一个存储适配器,除了将它们保存在内存中之外,似乎没有任何缓存获取的模型的概念。

我在这个 Ember wishlist 中发现了类似的请求并在评论中talk by Tom Dale ,但我没有发现任何迹象表明这将是 Ember 中的现有功能。

我有两个问题(第一个问题很重要):

  1. 目前,在本地存储中实现缓存模型并根据需要将其与远程数据同步的最佳方法是什么?
  2. 这是计划包含在 Ember 中的功能,还是至少维护人员认为最终应该添加的功能?

当谈到 1) 时,我可以想到几个策略:

a) 扩展现有适配器并添加自定义远程同步机制:

App.Store.registerAdapter('App.Post', DS.LSAdapter.extend({
// do stuff when stuff happens
}));

b) 维护单独的模型类 - 一组用于远程对象,一组用于本地对象 - 并根据需要在它们之间进行同步。使用标准 Todo 案例:

RemoteTodo –*sync*– Todo
|
UI

我有点希望这是一个真正的菜鸟问题,并且有一个良好的既定模式。

更新:找到this similar question 。它有一个很好的答案,但它是理论上的。我认为我需要的是一些实践技巧或示例实现的指针。

最佳答案

只是为了“提升”这个线程一点,因为它是我研究restful api 的 ember 本地缓存等解决方案时的最佳结果之一:

Dan Gebhardt 似乎在 Orbit.js 及其与 Ember 的集成方面做得非常好: https://github.com/orbitjs/ember-orbit

Orbit is a standalone library for coordinating access to data sources and keeping their contents synchronized.

Orbit provides a foundation for building advanced features in client-side applications such as offline operation, maintenance and synchronization of local caches, undo/redo stacks and ad hoc editing contexts.

Orbit.js features:

  • Support any number of different data sources in an application and provide access to them through common interfaces.

  • Allow for the fulfilment of requests by different sources, including the ability to specify priority and fallback plans.

  • Allow records to simultaneously exist in different states across sources.

  • Coordinate transformations across sources. Handle merges automatically where possible but allow for complete custom control.

  • Allow for blocking and non-blocking transformations.

  • Allow for synchronous and asynchronous requests.

  • Support transactions and undo/redo by tracking inverses of operations.

  • Work with plain JavaScript objects.

不要错过他关于 Orbit 的精彩演讲和幻灯片:
Introduction to Orbit.js

(更新:我从 Orbit 页面添加了一些更多的描述性信息,因为我的帖子因“仅”引用外部资源而不包含实际的解决方案而被否决。但在我看来 Orbit就像解决方案一样,在这里“包含”它的唯一方法是通过链接。)

关于ember.js - 使用 EmberData 在本地存储中缓存远程数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14814472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com