在实践中如何使用 Ember 中的 findAll 和 peekAll ?

2024-01-15

From EmberJS 文档 http://guides.emberjs.com/v2.0.0/models/finding-records/#toc_retrieving-multiple-records我有以下两种方法来检索给定类型的所有记录,一种发出请求,一种不发出请求。

var posts = this.store.findAll('post'); // => GET /posts

var posts = this.store.peekAll('post'); // => no network request

在我看来,我总是需要先做findAll但我不清楚我应该什么时候做peekAll.

例如,用户输入我的博客,然后我使用以下方式获取所有帖子findAll,然后在同一流程中的某个时刻我需要所有这些帖子,所以我应该使用peekAll以节省带宽。那么我怎么知道我已经请求了所有posts之前 ?我应该保存一些全局状态来处理这个问题吗? 我假设客户第一次请求peekAll如果没有任何记录,它会自动执行findAll或者也许我应该手动执行,但它可能会引入一些样板文件。

实际中如何使用findAll and peekAll或者它们相当于单个记录?有什么推荐吗?


.findAll已缓存:

第一次调用store.find,获取新数据

下次返回缓存数据

在后台获取新数据并更新

这是新的 findRecord 和 findAll 方法的行为。

正如您可以阅读的Ember Data v1.13 博客文章 http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html#toc_better-caching-defaults-for-code-findall-code-and-code-findrecord-code.

所以,以你的例子为例:

var posts = this.store.findAll('post'); // => GET /posts
// /\ or load from cache and update data in background /\

var posts = this.store.peekAll('post'); // => no network request

And:

在我看来,我总是需要先做 findAll 但不是 清楚我的理解我什么时候应该做 peekAll。

是的,你需要先做.findAll,但我们鼓励您使用.findAll在所有地方,因为它被缓存并适合多个数据请求(来自应用程序的许多地方,而不浪费带宽)。

例如,用户进入我的博客,然后我得到所有帖子 使用 findAll,然后在同一流程中的某个时刻我需要所有这些 发布,所以我应该使用 peekAll 来节省带宽。那我该怎么办 知道我之前已经请求了所有帖子吗?我应该保存一些吗 全局状态来处理这个?我假设第一次 如果没有任何记录,客户端会请求 peekAll 自动执行 findAll 或者也许我应该手动执行但它 可能会介绍一些样板文件。

我认为用户需要在您的应用程序中始终拥有最新的数据。如果您在他浏览页面时添加博客文章怎么办?如果你想使用.peekAll()那么用户需要刷新页面才能获取最新数据。

如果您想节省带宽,那么我建议您在 Ember Adapter 中实现某种附加逻辑,但您必须找到方法来平衡用户请求与始终提供最新数据的需要。您可以通过重写 Adapter 的方法来做到这一点:

shouldReloadAll: function(store, snapshotRecordArray)
shouldBackgroundReloadAll: function(store, snapshotRecordArray)

See 有关这些方法的更多信息,请参阅 Ember API 文档 http://emberjs.com/api/data/classes/DS.Adapter.html#method_shouldBackgroundReloadAll.

在实践中如何使用 findAll 和 peekAll 或它们的等效项 单条记录 ?有什么推荐吗?

如果您完全确定在第一次请求后始终拥有最新数据,则使用.peekAll。有些数据可以始终是最新的,因为例如它在数据库中几乎永远不会改变。然而,这取决于您的需求是什么以及您如何设计数据模型。很难找到好的例子,但也许想象一下,如果您有一些仅包含常量的模型。喜欢PI值等。也许你已经从某个地方导入了它,并且它是一个完整的、封闭的集合,永远不会改变。然后,在第一个之后.findAll,(例如,如果它是您应用程序的核心功能,则可以在中定义Application route beforeModelhook)您将确保不再需要任何请求并且您拥有所有数据。

你也可以使用.peekAll如果您的应用程序具有离线模式之类的功能并且只能依赖您已有的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在实践中如何使用 Ember 中的 findAll 和 peekAll ? 的相关文章

随机推荐