【问题标题】:Ember call action on template load模板加载时的 Ember 调用操作
【发布时间】:2015-03-15 18:38:52
【问题描述】:

我有一个带有联系人页面的 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();
    }
}
});

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

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

非常感谢

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    要在控制器加载时运行方法,请在 init 挂钩下运行它。

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

    【讨论】:

    • 太好了,谢谢,初始化钩子正是我想要的。
    【解决方案2】:

    也许我认为它太微不足道了,但对我来说,您只需将 currentUser 添加到“观察”列表中即可。当 currentUser 改变时,filterUser 方法会被自动调用,对于你的两个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      相关资源
      最近更新 更多