你当然可以,但它可能涉及一些杂耍。您可以定义任何逻辑来决定要注入的内容以及如果要依赖默认约定的位置,您可以手动找到此对象,然后在注入时使用全名。
另一种选择是对每条路线都这样做,无论它们是否包含 Mixin。Inject 不需要全名,如果你调用 `App.inject('route', ...) 它会默认工作。
如果选择选项一,它看起来像这样。你基本上需要找到那些实现他们的 mixin 的路由,然后注入到所有这些路由中。
var guidForMixin = Ember.guidFor(App.YourMixin);
var routesToInjectInto = Ember.keys(App).filter(function (key) {
var route, mixins;
if (key.match(/Route$/))
route = App[key];
mixins = Ember.meta(route).mixins;
if (mixins) {
!!mixins[guidForMixin];
}
return false;
);
routesToInjectInto.each( function (key) {
var keyForInjection = Ember.decamelize(key);
App.inject('route:' + keyForInjection, 'sessionManager', 'session_manager:main');
});
此外,我建议在初始化程序中执行所有这些操作,但这可能是一个次要的考虑。
Ember.onload('Ember.Application', function(Application) {
Application.initializer {
name: "sessionManager"
initialize: function (container, application) {
// do the above here. Refer to app as the namespace instead of App.
// use the container instead of App.__container__ to register.
};
});