夹具包含联系人列表,每个联系人都有联系人类型。
我正在尝试使用 .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 是一个现场演示。

    10-06 02:57