当我使用ember时,如何设置所有路径具有相同的方法或操作?

时间:2015-06-11 09:48:27

标签: ember.js ember-simple-auth

我的ember应用程序使用1.11.3版本和ember-simple-auth(0.7.3)。所有路由必须设置AuthenticatedRouteMixin并使用beforeModel获取帐户信息,我认为这不是一个好方法。例如:

App.Route = Ember.Route.extend(AuthenticatedRouteMixin, {
  beforeModel: function() {
    Account.find().then(function(user) {
      this.set('user', user);
    })
  },
  setupController: function(controller, model) {
    controller.set('model', model);
    controller.set('user', this.get('user'));
  }
});

App.ApplicationRoute = App.Route.extend();

我设置了一个jsbin:http://emberjs.jsbin.com/wipasusige/1/edit?html,js,console,output

如果我的所有路线都使用App.Route.extend();,则问题是AuthenticatedRouteMixin无效。

我使用Route.extent设置所有路由beforeModel以获取帐户信息是一种好方法吗?

也许有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

由于此自定义只对AuthenticatedRouteMixin有意义,因此在mixin中执行它是有意义的!

App.CustomAuthenticatedRouteMixin = AuthenticatedRouteMixin.extend({

  beforeModel: function() {
    // We do not want the default functionality to be removed
    var superResult = this._super(transition);

    var accountPromise =
      Account
        .find()
        .then(function(user) {
          this.set('user', user);
          return superResult;
        }.bind(this));

    return accountPromise;
  },

  setupController: function(controller, model) {
    controller.set('model', model);
    controller.set('user', this.get('user'));
    this._super(controller, model);
  }

});

然后像在正常情况下使用AuthenticatedRoutMixin一样在路由中重复使用它。

Mixins允许从各种功能源编写类,这比从单个源类继承更灵活。

免责声明:上述代码只是一个概念,而不是一个完全可行的解决方案。您必须考虑如何在项目中实施它。