store.filter() 没有按预期工作 ember.js(尝试搜索模型) [英] store.filter() not working as expected ember.js (Trying to search models)

查看:19
本文介绍了store.filter() 没有按预期工作 ember.js(尝试搜索模型)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to implement a search system here and I am having some trouble with store.filter()

首先,除了这里之外,我找不到关于 store.filter() 方法的任何好的文档:http://emberjs.com/guides/models/frequently-asked-questions/

First of all I can't find any good documentation on the store.filter() method aside from here: http://emberjs.com/guides/models/frequently-asked-questions/

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

So I am using the example provided on that page as a guideline.

这是我的代码

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);
                });
            }
        }
    }
});

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

but when I log what is being returned, it's returning basically every single model. Instead of no results or a limited amount of results.

除此之外,procedure 它本身不是模型的对象,而是其他一些东西.

On top of that procedure it self is not the model's object, it's some other thing.

所以我的问题是如何获得带有字段的实际模型,以及如何确保商店实际上正在过滤结果?

So my question is how do I get the actual model with the fields and how can I ensure that the store is actually filtering the results?

推荐答案

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

You just need to pass in a function that returns true/false for including the record

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

If you want to make a call back to the server at the same time (find by query) you include the optional query param, the below example will call /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}
  */

这篇关于store.filter() 没有按预期工作 ember.js(尝试搜索模型)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆