【问题标题】:Ember Data filtering firebaseEmber 数据过滤 Firebase
【发布时间】:2017-03-14 15:59:50
【问题描述】:

我目前正在尝试使用 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: ""
});

【问题讨论】:

  • 你可以试试 filterBy 方法比如this.get('model').filterBy('name','typedvalue')
  • @kumkanillam 我在控制器中尝试过,但它返回一个空数组。
  • 控制器和路由文件名是否相同。更新您尝试的有问题的代码
  • @kumkanillam 我在编辑 2 中更新了控制器代码,谢谢。不过还是有些麻烦。
  • @kumkanillam 我在下面回复但由于某种原因无法标记您。

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


【解决方案1】:

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

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

queryParams: {
    search: {
      refreshModel: true
    }
  }

在控制器文件中,

queryParams: ['search'],
search: null

如果你可以只设置search 属性,那么它将start full transition

【讨论】:

  • 对不起,我没有发布控制器,但是它有那些代码行,我还在路由中添加了查询参数,仍然没有。它在控制台中正确记录了所有信息,但搜索没有进行。
  • @pvelasqu 请包括您在哪里设置this.set('search','typedvalue') 的代码?这部分代码对于触发全过渡非常重要
  • 抱歉,不确定您的意思。我认为我在任何地方都没有。我正在尝试从路由中的搜索中提取值并尝试将其作为参数传递。
  • 如果 url 包含 ?search=typedvalue 那么在模型钩子中你会得到值 params.search。当路由加载时,你第一次在你的模型钩子中得到这个吗
  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 2019-08-12
  • 2019-03-24
相关资源
最近更新 更多