对模板加载的Ember调用操作

时间:2015-03-15 18:38:53

标签: ember.js

我有一个带有联系人页面的余烬应用程序。我有一个用户列表,我希望根据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字段中输入文本会运行我的过滤器。但是我有两个问题无法解决:

  1. 如何在模板首次加载时运行filterUsers函数,以使用在currentUser模型上设置的变量?
  2. 当我调用setFilters方法并更改当前用户时,如何使filterUsers运行?
  3. 非常感谢

2 个答案:

答案 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方法。