0

Mixin を拡張SessionManagerするたびにアクセスできるようにしたいインスタンスがあるとします。単一の Route インスタンスを参照できるため、この依存関係を「ルートのグループ」に注入することは可能ですか?RouteProtectedRoute

したがって、代わりに:

App.inject('route:protected1', 'sessionManager', 'session_manager:main');
App.inject('route:protected2', 'sessionManager', 'session_manager:main');
....

私は次のようなことができます

App.inject('route:protectedmixin', 'sessionManager', session_manager:main);
4

1 に答える 1

0

確かにできますが、少しジャグリングが必要になる場合があります。何を注入するか、どこに注入するかを決定するロジックを定義できます。デフォルトの規則に依存する場合は、このオブジェクトを手動で見つけて、注入時にフルネームを使用できます。

別のオプションは、Mixin が含まれているかどうかに関係なく、ルートごとに実行することです。Inject は完全な名前を必要としません。`App.inject('route', ...) を呼び出すと、デフォルトで機能します。

オプション 1 を使用すると、次のようになります。基本的に、ミックスインを実装するルートを見つけて、それらすべてに注入する必要があります。

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. 
    };
});
于 2014-03-27T21:42:20.627 に答える