store.filter()无法正常工作ember.js(试图搜索模型)

时间:2014-06-13 15:25:16

标签: javascript ember.js

我正在尝试在这里实施一个搜索系统,我在使用store.filter()时遇到了一些问题

首先,我无法在此处找到store.filter()方法的任何好文档:http://emberjs.com/guides/models/frequently-asked-questions/

所以我使用该页面上提供的示例作为指导。

这就是我的代码

App.ApplicationController = Ember.ObjectController.extend({
    isDropdown: false,
    actions: {
        handle_search: function() {
            var search_text = this.get('search_text');
            if (search_text) {
                this.set('isDropdown', true);
                return this.store.filter('procedure', {proc_name: search_text}, function(procedure) {
                    console.log(procedure);
                });
            }
        }
    }
});

但是当我记录返回的内容时,它基本上每个模型都会返回。而不是没有结果或有限的结果。

除此之外procedure,自我不是模特的对象,它还有其他一些东西。

所以我的问题是如何使用字段获取实际模型,以及如何确保商店实际过滤结果?

1 个答案:

答案 0 :(得分:2)

您只需要传入一个返回true / false的函数来包含记录

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return this.store.filter('color', function(item){
      return item.get('color')=='red';
    });
  }
});

http://emberjs.jsbin.com/OxIDiVU/647/edit

如果您想同时回拨服务器(按查询查找),请包含可选的查询参数,以下示例将调用/colors?color=green

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return this.store.filter('color', {color:'green'}, function(item){
      return item.get('color')=='red';
    });
  }
});

/**
    Takes a type and filter function, and returns a live RecordArray that
    remains up to date as new records are loaded into the store or created
    locally.

    The callback function takes a materialized record, and returns true
    if the record should be included in the filter and false if it should
    not.

    The filter function is called once on all records for the type when
    it is created, and then once on each newly loaded or created record.

    If any of a record's properties change, or if it changes state, the
    filter function will be invoked again to determine whether it should
    still be in the array.

    Optionally you can pass a query which will be triggered at first. The
    results returned by the server could then appear in the filter if they
    match the filter function.

    Example

    ```javascript
    store.filter('post', {unread: true}, function(post) {
      return post.get('unread');
    }).then(function(unreadPosts) {
      unreadPosts.get('length'); // 5
      var unreadPost = unreadPosts.objectAt(0);
      unreadPost.set('unread', false);
      unreadPosts.get('length'); // 4
    });
    ```

    @method filter
    @param {String or subclass of DS.Model} type
    @param {Object} query optional query
    @param {Function} filter
    @return {DS.PromiseArray}
  */