我有一个带有联系人页面的余烬应用程序。我有一个用户列表,我希望根据a)搜索查询和b)保存在session.currentUser模型上的过滤器进行过滤(使用ember-simple-auth-devise)。
我的路线:
import Ember from 'ember';
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin).extend({
model: function() {
return this.store.find('user');
},
setupController: function(controller, model){
this._super(controller, model);
var currentUser = this.store.fetch('user', this.get('session').get('user_id'));
// console.log(currentUser);
controller.set('currentUser', currentUser);
}
});
我的控制器:
import Ember from 'ember';
export default Ember.ArrayController.extend({
searchText: '',
filterUsers : function() {
// Function to set the filteredUsers property, set in the route, based on the searchText
var searchText = this.get('searchText'), regex = new RegExp(searchText, 'i');
var us = this.get('model').filter(function(item) {
// Run some filters here...
});
this.set('filteredUsers', us);
return false;
}.observes('searchText', 'model'),
actions: {
// Click the "Filter" button and update the server
setFilters: function(){
this.get('session').get('currentUser').save();
}
}
});
这可以解决问题 - 在searchText字段中输入文本会运行我的过滤器。但是我有两个问题无法解决:
非常感谢
答案 0 :(得分:2)
要在控制器加载上运行方法,请在init hook下运行它。
export default Ember.ArrayController.extend({
...
filterUsers : function() {
...
}.observes('searchText', 'model').on('init') // <---
...
});
或者您也可以这样做:
export default Ember.ArrayController.extend({
init: function() {
this._super();
this.filterUsers();
}
...
});
要在操作中调用控制器方法,只需调用它:
...
actions: {
setFilters: function(){
this.filterUsers(); // <---
...
}
}
...
答案 1 :(得分:0)
也许我觉得这太微不足道了,但对我来说,看起来你只需要添加currentUser到&#39;观察&#39;名单。当更改currentUser时,会针对您的两个问题自动调用filterUser方法。