2014-07-21 4 views
4

Ember-cli에 앱이 있습니다. 모든 경로, 컨트롤러 및 뷰에 메서드를 삽입하려고합니다. app/utils 디렉토리를 활용하고 메서드의 모듈을이 파일을 호출하는 모든 파일로 가져올 수 있다는 것을 알고 있지만이 메서드를 자동으로 사용할 수 있어야합니다. 따라서 이니셜 라이저를 사용하여 메소드를 주입하기로했습니다.ember-cli에 이니셜 라이저가있는 함수 주입

이니셜 라이저는 다음과 같습니다

export default { 
    name: 'injectMethod', 

    initialize: function(container, app) { 
    var someFunction = function(message) { 

    }; 

    app.register('function:main', someFunction); 

    Em.A(['route', 'controller', 'view']).forEach(function(place) { 
     app.inject(place, 'someFunction', 'function:main'); 
    }); 
    } 
}; 

이것은 다음과 같은 오류 메시지가 발생합니다 Uncaught TypeError: undefined is not a function. app.inject() 행을 제거하면 오류가 사라집니다.

엠버 클리에서는 이니셜 라이저가 다르게 처리 되나요? 위의 코드에서 잘못된 것이 있습니까? 또는 이니셜 라이저를 사용하는 것보다 내 목표를 달성하는 더 좋은 방법입니까?

+0

donno 방법 ember-을 cli는 아직 작동하지만 .. 여기 앱이 전 세계적으로 사용 가능합니까? – thecodejack

+0

ember-cli/es6 모듈의 목표 중 하나는 전역 네임 스페이스에서 모든 것을 제거하는 것입니다. 개별 모듈을 등록하기 때문에'App'을 사용할 수 없습니다. –

답변

11

Ember는 create 메서드를 사용하여 인스턴스를 만들 수있는 팩토리를 등록 할 것을 기대합니다. 당신이 인스턴스를 전달 (또는 방법)하는 경우는 인스턴스화하려고 그냥 전달 된 인스턴스를 사용하지 엠버 말할 필요가

export default { 
    name: 'injectMethod', 

    initialize: function(container, app) { 
    var someFunction = function(message) { 

    }; 

    app.register('function:main', someFunction, {instantiate: false}); 

    Em.A(['route', 'controller', 'view']).forEach(function(place) { 
     app.inject(place, 'someFunction', 'function:main'); 
    }); 
    } 
}; 

예 :. http://emberjs.jsbin.com/xaboliwu/1/edit

+1

http://balinterdi.com/2014/05/01/dependency-injection-in-ember-dot-js.html – HeroicEric

+0

Perfect에 대한 자세한 블로그 게시물이 있습니다. 고마워, 얘들 아! –

+0

nice .... awesome .. – thecodejack