#3 查询记录
来源:互联网 发布:海宁网络招聘 编辑:程序博客网 时间:2024/05/22 17:05
英文原版:https://guides.emberjs.com/v2.14.0/models/finding-records/
Ember Data的store提供了一个接口用来检索某个类型的记录。
检索单条记录
使用store.findRecord()来通过type和id来检索一条记录。这将会返回一个带有记录数据的promise对象。
let blogPost = this.get('store').findRecord('blog-post', 1); // => GET /blog-posts/1
使用store.peekRecord()通过type和id来检索一条记录,这时并不会产生网络请求。它仅仅从store中检索该记录。
let blogPost = this.get('store').peekRecord('blog-post', 1); // => no network request
检索多条记录
使用store.findAll()检索某类型的所有记录:
let blogPosts = this.get('store').findAll('blog-post'); // => GET /blog-posts
使用store.peekAll()来检索已经在本地store中的所有记录:
let blogPosts = this.get('store').peekAll('blog-post'); // => no network request
store.findAll()会返回一个包含DS.RecordArray对象的DS.PromiseArray对象;store.peekAll( )直接返回DS.RecordArray对象。
需要注意的是,DS.RecordArray不是javascript原生数组,它是一个实现了Ember.Enumerable的对象。它重要是因为,如果你想通过索引值index来检索数据的时候,直接通过[ ]数组符号是不行,你必须使用objectAt(index)方法。
查询多条记录
Ember Data提供了查询记录的能力。调用store.query()将会发送一个GET请求,并可以携带查询参数。该方法同findAll( )一样,将返回DS.PromiseArray对象。
比如,可以查询名字是Peter的所有person模型:
// GET to /persons?filter[name]=Peterthis.get('store').query('person', { filter: { name: 'Peter' }}).then(function(peters) { // Do something with `peters`});
查询单条记录
如果你的适配器(adapter)支持能够返回单个模型对象的服务器请求,Ember Data提供的store.queryRecord()将会返回带有这个单条记录的promise对象。这个请求通过在适配器中定义的queryRecord( )被发出。
例子,服务器提供了返回当前已登陆的用户的接口:
// GET /api/current_user{ user: { id: 1234, username: 'admin' }}
对应于User模型的适配器定义了一个queryRecord() 方法:
app/adapters/user.jsimport DS from "ember-data";export default DS.Adapter.extend({ queryRecord(store, type, query) { return Ember.$.getJSON("/api/current_user"); }});
然后,调用store.queryRecord()将会从服务器查询该记录:
store.queryRecord('user', {}).then(function(user) { let username = user.get('username'); console.log(`Currently logged in as ${username}`);});
就像使用store.query()一样,也可以给store.queryRecord()中传递查询参数,并且这个参数对适配器中的queryRecord()也有效。这时候适配器必须返回一个单独的模型对象,返回一个带有单个模型对象的数组也是不允许的,否则Ember Data会抛出异常。
注意,Ember内置的JSON API adapter 并没有直接提供对queryRecord()方法的支持,它基于REST风格的请求并且返回数组形式的结果。
如果你的服务器接口或者适配器只接受数组形式的返回数组,但是你希望只检索单条记录,你或许可以使用query()来作为替代方案:
// GET to /users?filter[email]=tomster@example.comtom = store.query('user', { filter: { email: 'tomster@example.com' }}).then(function(users) { return users.get("firstObject");});
本节完
- #3 查询记录
- 记录查询
- MySQl学习记录3 :查询笔记
- 查询重复记录
- SQL重复记录查询
- SQL查询重复记录
- SQL查询重复记录
- 查询指定记录数
- SQL重复记录查询
- 查询重复记录
- 查询重复记录
- 查询重复记录
- 查询重复记录
- 查询重复记录
- 查询重复记录
- SQL重复记录查询
- 查询前几条记录
- 查询重复记录
- Google的Java编程风格指南(Java编码规范)
- 模型评估与选择
- cocos Creator 学习(三)
- 运营活动测试点
- 拯救黑砖 红米2A
- #3 查询记录
- RecyclerView EditText 数据错乱问题
- oracle Extract 函数
- Eclipse远程调试Tomcat
- linux统计当前目录下有多少文件
- [Python/发QQ邮件]
- Angular 4 打包并发布
- SDUT-1466 双向队列
- 《Redis官方文档》Redis集群教程