理論的には、必要なことを行うためにそれreopenClassを再度開いEmber.Controllerて拡張するために使用できます。jsfiddle で試してみましたが、うまくいきませんでした。
私が仕事に就いたのはEmber.Mixin.
App.IsOn = Ember.Mixin.create({
needs: ['application'],
isOn: Ember.computed.alias("controllers.application.isOn")
})
App.IndexController = Ember.Controller.extend(App.IsOn,{});
自動生成されたコントローラーは処理しませんが、他にコントローラーが必要ない場合は、1 行だけで機能をコントローラーに入れることができます。
すべてが機能しているjsfiddleは次のとおりです。
http://jsfiddle.net/DqeLv/
編集: の代わりにtoggleOnメソッドを使用したいことも追加する必要があります。イベントのバブリングは、最も具体的なコントローラーから、そのコントローラーのルート、そして連続する各親ルート (コントローラーではありません) に進みます。ApplicationRouteApplicationController
つまり、あなたが"/users/new"アクションをトリガーすると、次のようになります:
UsersNewController=> UsersNewRoute=> UsersRoute=>ApplicationRoute
編集 #2: わかりました。しばらく眠った後reopen、自動生成されたコントローラーが自動的にisOnプロパティを取得できるように作業を開始できました。
Ember.Controller.reopen({
needs: ['application'],
isOn: Ember.computed.alias("controllers.application.isOn")
});
これは、ArrayControllerorのインスタンスではなく、「一般的な」コントローラーでのみ機能するようですObjectController(を返さないルートのみmodel)。
ArrayController自動生成されたObjectControllerインスタンスで機能させたい場合はreopen、これらの 2 つのクラスを使用できます。
Ember.ArrayController.reopen({ ... })
http://jsfiddle.net/HTPaF/2/