Ember.Application 등록 및 주입 방법을 언제 어떻게 사용합니까?
Ember.Application 등록 및 주입 방법 을 사용하는 방법을 이해하려고 합니다.
이러한 기능은 어떤 용도로 설계 되었습니까? 언제 어떻게 사용합니까?
정말 알고 싶습니다!
당신이 다음의 인스턴스 엠버 데이터 사용하는 경우, 예를 들어, 대부분의 규칙을 사용하여 응용 프로그램을 부팅 할 때 기본적으로 엠버 의존성 주입을 수행 store
클래스는 모든에 주입 route
하고 controller
응용 프로그램에서를 나중에 간단하게 수행하여 참조를 얻을 수 있도록, this.get('store')
어떤 내부 경로 또는 컨트롤러.
예를 들어 여기에 기본 store
get이 등록 된 코드 추출이 있습니다 ( 소스 에서 가져옴 ).
Ember.onLoad('Ember.Application', function(Application) {
Application.initializer({
name: "store",
initialize: function(container, application) {
application.register('store:main', application.Store);
...
}
container.lookup('store:main');
}
});
그리고 주입 ( 소스 )
Application.initializer({
name: "injectStore",
initialize: function(container, application) {
application.inject('controller', 'store', 'store:main');
application.inject('route', 'store', 'store:main');
application.inject('dataAdapter', 'store', 'store:main');
}
...
});
즉 register
, inject
및는 종속성을 등록하고 직접 주입하는 메서드입니다.
하자 당신이 있다고 가정 Session
하면 응용 프로그램 시작에 서버 요청 후 채울 개체를, 당신은 모든 컨트롤러,이 같은 뭔가를 할 수에 대한 참조를 갖고 싶어한다 :
var App = Ember.Application.create({
ready: function(){
this.register('session:current', App.Session, {singleton: true});
this.inject('controller', 'session', 'session:current');
}
});
App.Session = Ember.Object.extend({
sessionHash: ''
});
이 코드는 session
모든 컨트롤러 인스턴스 의 속성을의 싱글 톤 인스턴스로 설정 App.Session
하므로 모든 컨트롤러 this.get('session')
에서 참조를 얻을 수 있으며 싱글 톤으로 정의되어 있으므로 항상 동일한 session
객체가됩니다.
으로 register
당신은 컨트롤러, 모델, 뷰, 또는 임의의 개체 유형을 등록 할 수 있습니다. inject
반면, 주어진 클래스의 모든 인스턴스 에 주입 할 수 있습니다 . 예를 들어 인스턴스 와 함께 속성 을 모든 모델에 inject('model', 'session', 'session:current')
삽입 할 수도 있습니다 . 개체 를 주입하기 위해 할 수있는 에 대해 가정 해 봅시다 .session
session:current
session
IndexView
inject('view:index', 'session', 'session:current')
하지만 register
그리고 inject
당신은 당신이 정말로 당신의 목표를 달성하기 위해 다른 방법이 없습니다 알고있는 경우에 현명하게 만이를 사용한다 매우 강력, 나는 문서의 부족 좌절의 지표 것 같다.
업데이트-작동하는 예제 없이는 좋은 설명이 없습니다.
Since It's mostly a must to provide a working example with an explanation, there it goes: http://jsbin.com/usaluc/6/edit. Notice how in the example we can simply access the mentioned sessionHash
by referring to the current controller's session object with {{controller.session.sessionHash}}
in every route we are in, this is the merit of what we have done by registering and injecting the App.Session
object in every controller in the application.
Hope it helps.
A common use case is to provide the current loggedin user property to controllers and routes as in https://github.com/kelonye/ember-user/blob/master/lib/index.js and https://github.com/kelonye/ember-user/blob/master/test/index.js
'Programing' 카테고리의 다른 글
git diff를 grep하는 방법? (0) | 2020.11.28 |
---|---|
스택에 너무 많은 공간이 할당 된 이유는 무엇입니까? (0) | 2020.11.28 |
앤티 앨리어싱을 유지하면서 선명한 가장자리로 svg 요소를 렌더링하는 방법은 무엇입니까? (0) | 2020.11.28 |
React Redux에서 스토어 상태에 어떻게 액세스합니까? (0) | 2020.11.28 |
HTML 인코딩은 모든 종류의 XSS 공격을 방지합니까? (0) | 2020.11.28 |