EmberData의 FixtureAdapter에서query를 어떻게 지원합니까?
1630 단어 ember.js
때때로 우리는fixtures가query를 지원해야 한다. 예를 들어 다음과 같다.
App.SomeRoute = Ember.Route.extend({
model: function () {
return this.store.findQuery('model', { name: 'xxx' });
}
});
하지만 nope!당신은 다음과 같은 오류를 보고받을 수 있습니다.
Error: assertion failed: Not implemented: You must override the DS.FixtureAdapter::queryFixtures method to support querying the fixture store.
Why?
DS.FixtureAdapter::queryFixtures
과findQuery
무슨 관계가 있습니까?원본 코드를 보면 원래 findQuery
호출된 방법이 바로 queryFixtures
방법이고, queryFixtures
내용은 매우 유머러스하다는 것을 알 수 있다.queryFixtures: function(fixtures, query, type) {
Ember.assert('Not implemented: You must override the DS.FixtureAdapter::queryFixtures method to support querying the fixture store.');
}
그러나 이것은 이해할 수 있다.fixtures는 위조된 APIresponses이기 때문에 진정으로 백그라운드 논리를 실현한 것이 아니다.그래서 EmberData는 형식적인 인터페이스만 제공합니다. 실제적인 수요에 따라 스스로 그것을 실현해야 합니다.
예를 들어 처음에 그 예에서 우리가 필요로 하는 것은 되돌아오는 데이터 그룹에서 선별하고 값과query 요청을 똑같이 되돌려주는 것이다. 간단하다.
DS.FixtureAdapter.reopen({
queryFixtures: function (fixtures, query, type) {
fixtures.filter(function (fixture) {
var key;
for (key in query) {
if (!query.hasOwnProperty(key)) continue;
if (fixture[key] !== query[key]) return false;
}
return true;
});
}
});
queryFixture
가 수신한 세 가지 매개 변수는 각각 find
돌아온 데이터 집합, 당신의 조회 조건 대상, 모델입니다.