I was told为了不一直提出请求,可以使用.all()方法加载存储在商店中的数据。但是Ember如何处理缓存?我有几个问题。
你如何控制缓存?什么时候使用.find()和.all()。你使用.find()然后.all()吗?多久了?
.all()是否有一些到期日期,以便在一段时间后它可以发出新请求?或者它使用本地存储,以便我必须手动清除它?
假设我有一些数据,我想每周只刷一次?我该怎么办呢?现在,每次我进入或重新访问同一路线时,都会发出新请求。我怎么能避免这个?
答案 0 :(得分:21)
首先回答您的评论中的问题:
我想知道如何在应用程序启动时加载数据(不是通过路由,因为我不必经常更新它)。是否可能
从技术上讲,这仍然是通过路由,但是当应用程序“启动”时加载数据的最佳方法是通过Application Route的模型钩子。
App.ApplicationRoute = Ember.Route.extend({
model: function({
return App.Post.find();
})
})
路由器将等待find()返回的promise以解析,因此您可以确保在输入任何其他路由之前服务器的响应已经返回。
你如何控制缓存?
大多数情况下你不担心。如果需要,您可以在超时后刷新()单个记录。
什么时候使用.find()和.all()。你使用.find()然后.all()吗?多久了?
取决于你想要达到的目标。在我们的应用程序中,我们在应用程序路由中使用find(),然后在其他路由中使用all()或filter()。
.all()是否有一些到期日期,以便在一段时间后它可以发出新请求?
不。它永远不会发出新的请求
或者它使用本地存储,所以我必须手动清除它?
它不使用本地存储,记录在内存中。所以肯定F5会清除缓存。
假设我有一些数据,我想每周只刷一次?我该怎么办呢?现在,每次我进入或重新访问同一路线时,都会发出新请求。我怎么能避免这个?
那么我们假设您只在应用程序路由中使用find(),并且该用户将浏览器保持打开状态1周并且记录已过期。有很多方法可以刷新,什么是容易/最好的取决于它们是否一次过期或者它们是否一次超时。
答案 1 :(得分:2)
您调用缓存的是商店的内容。通常有两种方法来更新商店以反映在后端方面所做的更改: