Ember.js中的事件顺序(applicationController和路由)

时间:2013-08-16 22:23:36

标签: ruby-on-rails ember.js

我从ApplicationController init事件中的元标记中获取当前用户:

App.ApplicationController = Ember.Controller.extend({
  needs: ['currentUser'],

  init: function() {
    'use strict';

    this._super();

    var attributes = $('meta[name="current-user"]').attr('content');

    if (attributes) {
      this.set('controllers.currentUser.content', App.User.create().setProperties(JSON.parse(attributes)));
    }
  },

在需要对用户进行身份验证的每个路由中,我有一个重定向挂钩,如果未设置currentUser,则应该重定向:

App.UserEditRoute = Ember.Route.extend({
  redirect: function() {
    if (this.controllerFor('currentUser').get('isSignedIn') === false) {
      this.transitionTo('user.login');
    }
  }
});

问题是Route重定向事件在ApplicationController.init之前触发。

实现这一目标的正确方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

而不是ApplicationController.init()这个逻辑属于路线。这样的事情应该有效:

App.ApplicationRoute = Ember.Route.extend({
  beforeModel: function() {
    var attributes = $('meta[name="current-user"]').attr('content');
    if (attributes) {
      var user = App.User.create().setProperties(JSON.parse(attributes));
      this.controllerFor('currentUser').set('content', user);
    }
  }
});