因此,将从您的评论中回答问题开始:
我想知道如何在应用程序启动时加载数据(而不是通过路由,因为我不必经常更新它)。可能吗
所以从技术上讲,这仍然是通过路由,但是当应用程序“启动”时加载数据的最佳方式是通过 Application Route 的模型挂钩。
App.ApplicationRoute = Ember.Route.extend({
model: function({
return App.Post.find();
})
})
路由器将等待 find() 返回的承诺解决,因此您可以确保在输入任何其他路由之前来自服务器的响应已经返回。
你如何控制缓存?
大多数情况下,您不必担心。如果需要,您可以在超时后刷新()单个记录。
什么时候使用 .find() 以及什么时候使用 .all()。你使用 .find() 然后 .all() 吗?多长时间?
取决于你想达到什么。在我们的应用程序中,我们在应用程序路由中使用 find(),然后在其他路由中使用 all() 或 filter()。
.all() 是否有一些到期日期,以便在一段时间后它可以发出新请求?
没有。它永远不会提出新的请求
或者它使用本地存储,所以我必须手动清除它?
它不使用本地存储,记录在内存中。所以F5肯定会清除缓存。
假设我有一些数据只想每周刷新一次?我该怎么办?现在,每次我进入或重新访问同一条路线时,都会发出一个新请求。我怎样才能避免这种情况?
所以好吧,假设您仅在应用程序路由中使用 find(),并且该用户保持浏览器打开 1 周并且记录已过期。有很多方法可以刷新,最简单/最好的方法取决于它们是同时过期还是一次超时。
- 有一些计时器检查过期记录并根据需要调用 refresh()。
- 有一个按计划更新的 Ping 模型。当服务器响应更新时,它可以旁加载任何更改的记录。
- 或者可以每周刷新一次浏览器(通过 window.location ...)