Ember数据过滤firebase

时间:2017-03-14 15:59:51

标签: javascript firebase ember.js ember-data filtering

我目前正在尝试使用ember数据从firebase数据库中过滤数据。我希望在用户根据数据属性名称在搜索框中键入时过滤数据。

这是目前的模特:

import DS from 'ember-data';
    export default DS.Model.extend({
        name: DS.attr(),
        requirements: DS.attr(),
        skills: DS.attr()
    });

这是目前的路线:

import Ember from 'ember';
export default Ember.Route.extend({
    model() {
        var obj = this.store.findAll('quest');
        return obj;
    }
});

当前的firebase数据库中填充了虚拟数据,但也具有使用push命令生成的自动生成的ID,不确定是否存在任何问题。我尝试使用路由器中的过滤器过滤数据,但没有成功,这是我第一次使用ember和firebase。谢谢。

编辑: 我创建了一个控制器来尝试过滤数据。数据通过动作传递给控制器​​,但我似乎无法实际解析数据。这是控制器代码:

import Ember from 'ember';

export default Ember.Controller.extend({
    actions: {
        filter() {
            var model = this.get('model');
            console.log(model);
            this.toggleProperty('isExpanded');
    }
}

编辑2: 我已经更新了控制器,可以正确搜索firebase数据库,但它没有正确读取我的搜索值。

import Ember from 'ember';

export default Ember.Route.extend({
    model(params) {
        var search = JSON.stringify(params.search);
        console.log(search);
        return this.store.query('quest', {
            startAt:  search,
            orderBy: 'title',
            limitToLast: 10
        });
    }
});

如果我将“startAt:search”行更改为硬编码行,则会正确过滤。有什么想法吗?

编辑3: 附加图像以显示加载时页面的外观,以及搜索的日志记录以显示其正在传递。 console on the load of the page 这是控制器中更新的代码:

import Ember from 'ember';

export default Ember.Controller.extend({
    queryParams: ['search'],
    search: ""
});

1 个答案:

答案 0 :(得分:0)

您需要查看Query Parameters docs。 在路由和控制器文件中定义queryParams属性以获取模型钩子中的值。

所以在route.js中定义queryParams,如下所示

queryParams: {
    search: {
      refreshModel: true
    }
  }

并在控制器文件中

queryParams: ['search'],
search: null

如果您可以设置search属性,那么start full transition