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】协议,转载请保留原文出处及本版权声明。











评论