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,{});
그것은 자동으로 생성 된 컨트롤러를 처리하지 않습니다,하지만 당신이 무엇을위한 컨트롤러가 필요하지 않은 경우 당신은 단지 하나의 선으로 컨트롤러에 기능을 넣어 보자 않습니다.
여기에 모든 것을 작업과 jsfiddle입니다 :
http://jsfiddle.net/DqeLv/
편집 : 나는 또한 당신의 ApplicationRoute
대신 ApplicationController
에 toggleOn
방법을하려는 추가해야합니다. 이벤트의 버블 링은 가장 구체적인 컨트롤러에서부터 해당 컨트롤러의 루트까지, 각 연속적인 상위 루트까지 (컨트롤러가 아닌) 진행됩니다. 그래서
은 갈 것입니다 당신이 "https://stackoverflow.com/users/new"
에있어 및 작업을 트리거 대답 :
UsersNewController
=>UsersNewRoute
=>UsersRoute
=>ApplicationRoute
편집 # 2 : OK, 잠을 점점 후 reopen
을 작동시켜 자동 생성 컨트롤러가 isOn
속성을 자동으로 가져올 수있었습니다.
Ember.Controller.reopen({
needs: ['application'],
isOn: Ember.computed.alias("controllers.application.isOn")
});
는 단지 (단지 model
반환하지 않는 경로에 대한)하지 ArrayController
또는 ObjectController
의 인스턴스에 대한 "일반적인"컨트롤러 작동 것으로 보인다.
당신이 자동으로 작동하려면
는
ArrayController
및
ObjectController
인스턴스 할 수 있습니다
reopen
두 클래스를 생성합니다. 응답에 대한
Ember.ArrayController.reopen({ ... })
http://jsfiddle.net/HTPaF/2/
감사합니다! 나는'Ember.Application.initializer'가 더 좋은 방법일지도 모른다고 생각하고 있습니다 만,'injection'이나'typeInjection' 함수로 동작시키지 못했습니다.당신이 이것에 대한 어떤 생각을 가지고 있다면, 그들은 높이 평가 될 것이지만, 나는 아직 대안을 볼 수없는 당신의 답을 정확한 것으로 표시했습니다. – cdaloisio