Ember 在存储已经有数据后具有 Ember 数据的子状态

Ember Substates with Ember data after store already has data

我已阅读 Ember 与 Substates 等相关的文档,我了解它是如何工作的。在我当前的应用程序中,我的 loading.hbs 和其他子 loading.hbs 模板工作正常。

我只是想讨论一个用例。

  1. 在我的路线 A 中,在我的模型函数中,我为我的模型执行了 fetchAll。
  2. 我去路线 A,第一次发送 api 请求,我看到我的加载屏幕。
  3. 现在我导航到其他路线 B。
  4. 现在我回到第一条路线 A,api 请求再次发送但是这个 未显示时间加载屏幕。

我想在这里发展我的理解。现在第二次加载屏幕没有显示,这告诉我们商店有数据,所以没有意义将其放在加载上,并且在获取商店发送请求与后端同步之后。

问题

现在我想知道这是否是 Ember 和 Ember-data 的默认行为?

要显示此加载屏幕,我是否需要手动执行某些操作?

理想情况下,我想要的是,如果在第二次请求时获取数据,则显示它,同时显示加载程序以告诉用户它也正在与后端同步。

我知道一切都可以手动完成,我不想重新发明轮子或以非常规的方式做事。所以我想知道 Ember 提供的最佳优化解决方案,经验丰富的 Ember 开发人员可以帮助我理解。

提前致谢。

Now I want to know if this is a default behaviour of Ember with Ember-data?

是的,当您执行 findRecordfindAll 时,这是 Ember 数据的默认行为,其中 shouldBackgroundReloadRecord or shouldBackgroundReloadAll event of the adapter respectively, is defaulted to true. You can turn this off by returning false and ensuring shouldReloadAll or shouldReloadRecord 分别设置为 true 以确保请求总是命中 API 而不是从缓存中获取。

理想情况下,始终建议立即在屏幕上显示数据,因为它具有更好的用户体验,让用户感觉数据已经存在并且正在获取数据的某些部分。 Check here

To show this loading screen, will I have to do something manually?

You may also want to read this

为了在我自己的研究之后添加更多详细信息,我在 Ember 中找到了有用且相关的详细信息 docs.This 都是关于缓存的。

如果记录已经存在,那么 promise 将立即得到解决,这就是为什么我看不到已加载记录的加载屏幕,同时 Ember- 数据也与后端同步并重新呈现模板。

Ember Model Docs

缓存 商店会自动为您缓存记录。如果记录已经加载,第二次请求它总是 return 相同的对象实例。这最大限度地减少了往返服务器的次数,并允许您的应用程序尽快将其 UI 呈现给用户。

例如,您的应用程序第一次向商店询问 ID 为 1 的人员记录时,它将从您的服务器获取该信息。

但是,下次您的应用程序请求 ID 为 1 的人时,商店会注意到它已经从服务器检索并缓存了该信息。它不会发送另一个请求获取相同的信息,而是会为您的应用程序提供与第一次提供的记录相同的记录。此功能始终 return 使用相同的记录对象,无论您查找多少次 - 有时称为恒等映射。

使用恒等映射很重要,因为它可以确保您在 UI 的一部分中所做的更改传播到 UI 的其他部分。这也意味着您不必手动保持记录同步 — 您可以通过 ID 请求记录,而不必担心应用程序的其他部分是否已经请求并加载它。

return缓存记录的一个缺点是您可能会发现数据的状态自从第一次加载到商店的身份映射中以来发生了变化。为了防止这种陈旧的数据长期成为问题,Ember Data 会在每次从存储中 return 缓存记录时自动在后台发出请求。当新数据进来时,记录会更新,如果自初始呈现以来记录发生变化,模板将使用新信息重新呈现。