夹具包含联系人列表,每个联系人都有联系人类型。
我正在尝试使用 .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
}
];
Controller 代码:
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。
最佳答案
只需将 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
是传递给 ember 数据类的 query
方法的对象。 Type
是 ember 数据类,其中查询是调用。 返回的是过滤后的数据。
例如,要执行一个简单的 where 像:
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;
});
}
});
Here 是一个现场演示。