Ember 调用模板加载操作
Ember call action on template load
我有一个带有联系人页面的 ember 应用程序。我有一个用户列表,我想根据 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();
}
}
});
这在一定程度上起作用 - 在搜索文本字段中输入文本 运行我的过滤器。但是我有两个问题无法解决:
- 如何在模板首次加载时创建 filterUsers 函数 运行,以使用在 currentUser 模型上设置的变量?
- 当我调用setFilters方法并更改当前用户时,如何使filterUsers 运行?
非常感谢
也许我认为它太琐碎了,但对我来说,您似乎只需将 currentUser 添加到 'observes' 列表即可。当 currentUser 改变时,会自动调用 filterUser 方法,解决你的两个问题。
要运行控制器加载的方法,运行它在初始化挂钩下。
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(); // <---
...
}
}
...
我有一个带有联系人页面的 ember 应用程序。我有一个用户列表,我想根据 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();
}
}
});
这在一定程度上起作用 - 在搜索文本字段中输入文本 运行我的过滤器。但是我有两个问题无法解决:
- 如何在模板首次加载时创建 filterUsers 函数 运行,以使用在 currentUser 模型上设置的变量?
- 当我调用setFilters方法并更改当前用户时,如何使filterUsers 运行?
非常感谢
也许我认为它太琐碎了,但对我来说,您似乎只需将 currentUser 添加到 'observes' 列表即可。当 currentUser 改变时,会自动调用 filterUser 方法,解决你的两个问题。
要运行控制器加载的方法,运行它在初始化挂钩下。
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(); // <---
...
}
}
...