Programing

Ember.Application 등록 및 주입 방법을 언제 어떻게 사용합니까?

lottogame 2020. 11. 28. 08:36
반응형

Ember.Application 등록 및 주입 방법을 언제 어떻게 사용합니까?


Ember.Application 등록주입 방법 을 사용하는 방법을 이해하려고 합니다.

이러한 기능은 어떤 용도로 설계 되었습니까? 언제 어떻게 사용합니까?

정말 알고 싶습니다!


당신이 다음의 인스턴스 엠버 데이터 사용하는 경우, 예를 들어, 대부분의 규칙을 사용하여 응용 프로그램을 부팅 할 때 기본적으로 엠버 의존성 주입을 수행 store클래스는 모든에 주입 route하고 controller응용 프로그램에서를 나중에 간단하게 수행하여 참조를 얻을 수 있도록, this.get('store')어떤 내부 경로 또는 컨트롤러.

예를 들어 여기에 기본 storeget이 등록 된 코드 추출이 있습니다 ( 소스 에서 가져옴 ).

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')삽입 할 수도 있습니다 . 개체 를 주입하기 위해 할 수있는 에 대해 가정 해 봅시다 .sessionsession:currentsessionIndexViewinject('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

참고URL : https://stackoverflow.com/questions/18209862/how-and-when-to-use-ember-application-register-and-inject-methods

반응형