Jav*_*diz 4 ember.js ember-data
从EmberJS文档中,我得到以下两种方法来检索给定类型的所有记录,一个是发出请求而另一个不是.
var posts = this.store.findAll('post'); // => GET /posts
var posts = this.store.peekAll('post'); // => no network request
在我看来,我总是需要先做一个,findAll但我不明白我应该什么时候做peekAll.
例如,用户进入我的博客然后我得到所有的帖子使用findAll,然后在同一流程中的某些点我需要所有这些帖子,所以我应该使用a peekAll来节省带宽.所以我怎么知道我以前要求所有的posts?我应该保存一些全球状态来处理吗?我会假设第一次客户端请求a peekAll如果没有任何记录它会自动执行findAll或者我应该手动但它可能会引入一些样板.
如何在实践中运用findAll和peekAll或者等价物单记录?有什么建议?
.findAll 缓存:
第一次调用store.find,获取新数据
下次返回缓存数据
在后台获取新数据并进行更新
这是新的findRecord和findAll方法的行为.
正如您可以阅读Ember Data v1.13博客文章.
所以,举个例子:
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
Run Code Online (Sandbox Code Playgroud)
和:
在我看来,我总是需要先做一个findAll但是我不明白我何时应该偷看所有.
是的,您需要先做.findAll,但我们鼓励您.findAll在所有地方使用,因为它被缓存并适合多个数据请求(来自应用程序的许多地方而不浪费带宽).
例如,用户进入我的博客然后我使用findAll获取所有帖子,然后在同一流程中的某个时刻我需要所有这些帖子,所以我应该使用peekAll来节省带宽.那我怎么知道我以前要求所有帖子?我应该保存一些全球状态来处理吗?我假设第一次客户端请求peekAll如果没有任何记录它将自动执行findAll或者我应该手动但它可能会引入一些样板.
我认为用户需要在您的应用程序中始终拥有最新数据.如果您在浏览页面时添加博客帖子怎么办?如果你愿意,.peekAll()那么用户需要刷新页面才能获得最新数据.
如果您想节省带宽,那么我建议您在Ember Adapter中实现某种额外的逻辑,但您必须找到平衡用户请求的方法,并始终需要始终提供最新数据.您可以通过覆盖Adapter的方法来完成此操作:
shouldReloadAll: function(store, snapshotRecordArray)
shouldBackgroundReloadAll: function(store, snapshotRecordArray)
Run Code Online (Sandbox Code Playgroud)
你如何在实践中使用findAll和peekAll或他们等同于单一记录?有什么建议?
如果您完全确定在第一次请求后始终拥有最新数据,那么请使用.peekAll.数据可以始终是最新的,因为,例如,它几乎不会在数据库中发生变化.这取决于您的需求以及您如何设计数据模型.很难找到好的例子,但也许想象一下你是否会有一些只包含常数的模型.喜欢PI价值等等.也许你已经从某个地方导入了它,它是完整的,封闭的一组永远不会改变的东西.然后,在第一次.findAll之后(例如,如果它是您的应用程序的核心功能,它可以在Application路由beforeModel挂钩中定义),您将确保不再需要更多请求并且您拥有所有数据.
您也可以使用,.peekAll如果您的应用程序具有类似离线模式的东西,并且只能依赖您已有的数据.
| 归档时间: |
|
| 查看次数: |
4248 次 |
| 最近记录: |