ember-cli&常用路由和控制器行为选项:子类,Mixin或初始化程序(服务)?

时间:2014-09-16 15:14:03

标签: ember.js ember-cli

我想要暴露给类的大多数/所有实例的属性和方法(即除少数路径,控制器之外的所有实例)。似乎有多种方法可以实现这一目标,我在这里寻找最佳实践的指导。

更具体地说,我在应用程序控制器上创建了一个属性来保存用户会话对象。我希望所有其他控制器公开这些数据,就好像我输入了一样:

needs: ['application'],
userSession: Ember.computed.alias('controllers.application.userSession')

直接进入控制器。

此外,我想覆盖beforeModel的所有路由(除了登录路由,可能还有更多)以检查userSession是否存在,如果不存在则重定向到登录路由。

这是在ember-cli FYI中实施的。那么,就是这样,"对"是什么?接近这里?我是否尝试通过初始化程序/服务注入这些更改?我是否创建了混合来完成这些工作(我不是每次有人在做这件事时都要记住这样做的粉丝,他们必须记住添加mixin)。

1 个答案:

答案 0 :(得分:2)

听起来非常像使用initializer 一个service是最好的方法(它们被拆分成为更清晰的代码)。 initializer只是加载service的代码,服务会付出艰苦的努力。 initializer应该类似于:

import AuthService from '../services/auth';

export default {
  name: 'auth-service',
  initialize: function( container, app ) {
    app.register( 'service:auth', AuthService, { singleton: true } );
    app.inject( 'controller', 'auth', 'service:auth' );
    app.inject( 'route', 'auth', 'service:auth' );
  }
};

然后将auth注入每个控制器和路由,您应该将userSession从应用程序移动到服务。

我的身份验证服务太大了(在我的情况下:太具体了,因为它使用Firebase)在这里引用它。昨天我在答案中给出了它的要点:Short delay when trying to run redirect with ember route with firebase authentication

正如你所提到的那样:人们不必严格记住包含mixins,因为你可以覆盖有人ember generate时使用的蓝图:http://www.ember-cli.com/#generators-and-blueprints