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();
    }
}
});

这在一定程度上起作用 - 在搜索文本字段中输入文本 运行我的过滤器。但是我有两个问题无法解决:

  1. 如何在模板首次加载时创建 filterUsers 函数 运行,以使用在 currentUser 模型上设置的变量?
  2. 当我调用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(); // <--- 
        ...
    }
}
...