Ember Data 之记录查询
前面在《Ember.js 项目开发之 Ember Data》介绍了 Ember Data 和 《Ember Data 之模型定义》,本文将继续介绍记录操作。
记录检索
Ember Data 存储提供了一个接口,用于检索单一类型的记录。
检索单个记录
使用 store.findRecord()
是根据记录的类型和 ID 进行检索,通过返回一个 promise
处理满足检索条件的记录:
使用 store.peekRecord()
是根据记录的类型和 ID 进行,不会发出 HTTP 请求,只有当记录已经存在于 store 中时,才会被返回:
检索多个记录
使用 store.findAll()
检索指定类型的所有记录:
使用store.peekall()
来检索已经加载到 store
中的指定类型的所有记录,而不需要发出 HTTP 请求:
store.findAll()
返回一个满足条件的RecordArray
和 store
的 PromiseArray
,store.peekAll
则直接返回 RecordArray
。
需要注意的是
RecordArray
并不是一个 JavaScript 数组,它是一个实现MutableArray
的对象。这是很重要的,因为,例如,如果想按索引检索记录,[]
符号将不起作用,必须使用objectAt(index)
代替。
查询多条记录
Ember Data 提供了查询满足特定条件的记录的功能。调用 store.query()
将发出一个 GET
请求,并将传递的对象序列化为查询参数。这个方法与 findAll
一样返回一个PromiseArray
。
例如,下面在 person
模型中检索名字为 Peter
的人:
查询单条记录
如果使用的适配器支持能够返回单个模型对象的服务器请求,那么 Ember Data 提供了一种便捷的方法 store.queryRecord()
,它将返回一个解析该单个记录的 promise
。请求是通过适配器定义的 queryRecord()
方法发出的。
例如,如果服务器 API 为当前登录的用户提供了一个端点app/adapters/user.js
:
如果 User
模型的适配器定义了一个针对该端点的 queryRecord()
方法:
然后,调用 store.queryRecord()
将从服务器检索该对象:
与 store.query()
的情况一样,查询对象也可以传递给 store.queryRecord()
,适配器的 queryRecord()
可以使用查询对象来限定请求。但是,适配器必须返回单个模型对象,而不是包含一个元素的数组,否则 Ember Data
将抛出异常。
需要注意,Ember 的默认
JSON:API adapter
没有提供直接支持queryRecord()
所需的方法,因为它依赖于以数组形式返回结果数据的 REST 请求定义。
如果服务器 API 或适配器仅提供数组响应,但又希望只检索一条记录,也可以使用 query()
方法,如下所示:
如果服务器 API 或适配器仅提供数组响应,但是希望仅检索单个记录,则可以选择使用以下query()
方法:
完
版权声明: 本文为 InfoQ 作者【devpoint】的原创文章。
原文链接:【http://xie.infoq.cn/article/91ded025bbda42ec52f2ca672】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论