我有一个关于使用 Ember 加载和缓存远程对象的问题。我正在开发一个 Ember 应用程序,它通过 REST API 使用服务器端存储。一些获取的数据很少发生变化,因此每次应用程序加载时都从服务器获取数据是不必要的。但这对于需要离线工作并仍将数据保存到服务器的应用程序来说也是一个问题。
Ember Data 有一个内置的存储适配器,用于通过 REST API 持久化模型,并且有本地存储适配器 https://github.com/rpflorence/ember-localstorage-adapter以及(正如下面肯指出的那样)。问题(如果这是一个问题)是一个模型只有一个存储适配器,除了将它们保存在内存中之外,似乎没有任何缓存获取的模型的概念。
我在这个中发现了类似的请求并在对此的评论中汤姆·戴尔的演讲 http://www.youtube.com/watch?v=djhAsWGOImk,但我还没有发现任何迹象表明这将是 Ember 中的现有功能。
我有两个问题(第一个问题很重要):
- 目前,在本地存储中实现缓存模型并根据需要将其与远程数据同步的最佳方法是什么?
- 这是计划包含在 Ember 中的功能,还是至少维护者认为最终应该添加的功能?
当谈到1)时,我可以想到几个策略:
a) 扩展现有适配器并添加自定义远程同步机制:
App.Store.registerAdapter('App.Post', DS.LSAdapter.extend({
// do stuff when stuff happens
}));
b) 维护单独的模型类——一组用于远程对象,一组用于本地对象——并根据需要在它们之间进行同步。对于标准 Todo 案例:
RemoteTodo –*sync*– Todo
|
UI
我有点希望这是一个真正的菜鸟问题,并且有一个良好的既定模式。
Updated: Found 这个类似的问题 https://stackoverflow.com/questions/13591899/architecture-for-data-layer-that-uses-both-localstorage-and-a-rest-remote-server?rq=1。它有一个很好的答案,但它是理论上的。我认为我需要的是一些实践技巧或示例实现的指针。
只是为了“提升”这个线程一点,因为它是我研究restful api 的 ember 本地缓存解决方案等时的最佳结果之一:
Dan Gebhardt 似乎在 Orbit.js 及其与 Ember 的集成方面做得非常好:https://github.com/orbitjs/ember-orbit https://github.com/orbitjs/ember-orbit
Orbit 是一个独立的库,用于协调对数据源的访问
和保持内容同步.
Orbit 为构建高级功能奠定了基础
离线操作、维护等客户端应用
本地缓存、撤消/重做堆栈和临时编辑的同步
上下文。
Orbit.js 特点:
支持应用程序中任意数量的不同数据源,并通过通用接口提供对它们的访问。
允许满足不同来源的请求,包括指定优先级和后备计划的能力。
允许记录同时存在于不同来源的不同状态。
协调跨来源的转换。尽可能自动处理合并,但允许完全自定义控制。
允许阻塞和非阻塞转换。
允许同步和异步请求。
通过跟踪操作的逆操作来支持事务和撤消/重做。
使用纯 JavaScript 对象。
不要错过他关于 Orbit 的精彩演讲和幻灯片:
Orbit.js 简介 http://www.youtube.com/watch?v=IAwk_mF-dWo
(UPDATE:我从 Orbit 页面添加了一些更多的描述性信息,因为我的帖子因“仅”引用外部资源而不包含实际的解决方案而被否决。但在我看来,Orbit 似乎喜欢这个解决方案,而在这里“包含”这个的唯一方法是通过链接。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)