2012-07-18 6 views
1

URL을 가져 오는 서비스가 있으며 애플리케이션 별 구성을 사용하여 싱글 톤으로 만들어야합니다.Ember - 컨트롤러간에 싱글 톤을 공유하는 방법

내 컨트롤러 중 일부는이 서비스를 사용해야합니다.

어떻게 바람직하게는 응용 프로그램에서, 한 곳에서이 서비스를 생성하고 직접 사용할 수 있도록 컨트롤러간에 공유 할 수 있습니다?

내 모듈은 requirejs를 사용하여 다른 파일로 나뉩니다.

URLService.js

var urlService = URLService.create({config: {...} }) 

SomeController.js

var SomeController = Em.Controller.extend({ 
    service: null 
}) 

응용 프로그램 :

App = Em.Application.create({ 
    SomeController: SomeController <-- inject the urlService into SomeController.service 
}) 

가있는 방법으로 내장 또는이 일을 가장 좋은 방법은? 또는 나는 건축에서 무언가를 놓치고 있습니까?

답변

0

당신은 너무처럼로부터 당신 같은 Controller 이미하고있는 extend 것을 기본 클래스, 모든 응용 프로그램 컨트롤러 extend를 만들 수 있습니다

// the service 
var urlService = URLService.create({config: {...} }) 

// the base controller class 
var BaseController = Em.Controller.extend({ 
    service: null, 
    init: function() { 
     this._super(); 
     this.set('service', urlService); 
    } 
}); 

// your controllers inheriting from your base controller already with the service instance 
var SomeController1 = BaseController.extend(...); 
var SomeController2 = BaseController.extend(...); 
+0

감사합니다, 그게 내가 생각, 내가 '무엇을 의미하지 않습니다 m requirejs를 통해 별도의 파일을 사용합니다. 즉, 구성된 URLService를 공유하는 폐쇄 기능이 없습니다. 특정 응용 프로그램 구성 모듈을 사용하여 requirejs 종속성 관리를 사용하여 서비스를 공유하고 구성하려고 생각했지만 필자는 젬 바에서 더 잘 수행 할 수있는 방법이 있는지 알고 싶었습니다. 답변과 노력에 감사드립니다. –

관련 문제