【发布时间】: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