7.6 Models -- Finding Records

Ember Data的store爲檢索一個類型的records提供一個接口。數組

1、Retrieving a single record(檢索單記錄)promise

1. 經過type和ID使用store.findRecord()去檢索一條record。這將返回一個promise,它經過請求的record來實現:網絡

var post = this.store.findRecord('post', 1); // => GET /posts/1

2. 經過type和ID使用store.peekRecord()去檢索一條record,沒有產生網絡請求。只有當它已經在sotre中存在時,這將返回這條record。app

var post = this.store.peekRecord('post', 1); // => no network request

2、Retrieving mutiple records異步

1. 對於一個給定的type,使用store.findAll()來檢索全部的records。ide

var posts = this.store.findAll('post'); // => GET /posts

2. 對於一個給定的type,使用store.peekAll()來檢索全部的records,這些records已經被加載到store中,不會產生網絡請求:post

var posts = this.store.peekAll('post'); // => no network request
  • store.findAll()返回一個DS.PromiseArray,它實現DS.RecordArray而且store.peekAll直接返回一個DS.RecordArray
  • 注意DS.RecordArray不是一個JS數組,這很重要。它是一個實現了Ember.Enumerable的對象。這很重要,由於,例如,若是你想經過index來檢索records,[]符號沒有用,你必須使用objcetAt(index)代替。

3、Querying for multiple recordsui

Ember Data提供了查詢知足某些條件的記錄的能力。調用store.query()將得到一個GET請求,並將傳遞的對象序列化爲查詢參數。這個方法和find方法同樣返回DS.PromiseArraythis

例如,咱們能夠查詢全部的名字爲Peterpserson modelsspa

var peters = this.store.query('person', { name: 'Peter' }); // => GET to /persons?name=Peter

4、Integrating with the route's model hook

1. 就像在 Specifying a Route's Model中討論的同樣,routes負責告訴它們的模板加載哪個model。

2. Ember.Routemodel hook支持開箱即用的異步的值。若是你從model hook中返回一個promise,這個路由器將會等待直到這個promise完成渲染模板。

3. 使用Ember Data使得它很容易使用異步數據編寫apps。僅僅從model hook中返回請求的record,而且讓Ember處理是否須要網絡請求。

app/router.js

var Router = Ember.Router.extend({});

Router.map(function() {
  this.route('posts');
  this.route('post', { path: ':post_id' });
});

export default Router;

app/routes/posts.js

export default Ember.Route.extend({
  model() {
    return this.store.findAll('post');
  }
});

app/routes/post.js

export default Ember.Route.extend({
  model(params) {
    return this.store.findRecord('post', params.post_id);
  }
})
相關文章
相關標籤/搜索