findQuery() не работает в ember-data?
Светильник содержит список контактов, и каждый контакт имеет тип контакта. Я пытаюсь отфильтровать записи контактов с помощью.findQuery(), но выдает следующую ошибку:
Uncaught TypeError: Object function () {.....} has no method 'findQuery'
Я перечислил мой код здесь:
Grid.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});
Grid.ModalModel = DS.Model.extend({
fname: DS.attr('string'),
lname: DS.attr('string'),
email: DS.attr('string'),
contactno: DS.attr('string'),
gendertype: DS.attr('boolean'),
contactype: DS.attr('number')
});
Grid.ModalModel.FIXTURES = [
{
id: 1,
fname: "sachin",
lname: "gh",
email: "gh",
contactno: "4542154",
gendertype: true,
contactype: 1
},
{
id: 2,
fname: "amit",
lname: "gh",
email: "gh",
contactno: "4542154",
gendertype: true,
contactype: 2
},
{
id: 3,
fname: "namit",
lname: "gh",
email: "gh",
contactno: "4542154",
gendertype: true,
contactype: 1
}
];
Код контроллера:
totpersonalcontact:function(){
return Grid.ModalModel.findQuery({ contactype: 2 }).get('length');
}.property('@each.isLoaded'),
totfriendcontact:function(){
return Grid.ModalModel.findQuery({ contactype: 3 }).get('length');
}.property('@each.isLoaded')
Я изменил.findQuery на.query, но каждый раз он показывает длину как 0.
1 ответ
Решение
Просто поменяй findQuery
в query
,
После этого в консоли появится сообщение об ошибке:
Assertion failed: Not implemented: You must override the DS.FixtureAdapter::queryFixtures method to support querying the fixture store.
Как сообщение объяснить, просто реализовать DS.FixtureAdapter#queryFixtures
, Параметры, переданные в queryFixtures
есть: записи, запрос, тип. Куда:
Records
это массив простых объектов JavaScript, которые вы будете фильтровать.Query
передан ли объектquery
метод вашего класса данных ember.Type
является классом данных ember, где запрос является call.
И возвращение это отфильтрованные данные.
Например, выполнить простое, где, как:
App.Person.query({ firstName: 'Tom' })
Просто откройте свой DS.FixtureAdapter
с:
DS.FixtureAdapter.reopen({
queryFixtures: function(records, query, type) {
return records.filter(function(record) {
for(var key in query) {
if (!query.hasOwnProperty(key)) { continue; }
var value = query[key];
if (record[key] !== value) { return false; }
}
return true;
});
}
});
Вот живая демонстрация.