Владение объектами Ember (getOwner, внедрение сервисов и т.д.)

:warning: Импорт getOwner из discourse-common/lib/get-owner устарел.

Для доступа, например, к сервисам у вас есть несколько доступных методов.

  • В компонентах, контроллерах и маршрутах следует использовать внедрение сервисов:

    import { service } from "@ember/service";
    
    export default class Something extends Component {
      @service router;
    
  • В случаях, когда сервис может быть недоступен (например, если он предоставляется необязательным плагином), существует внедрение optionalService:

    import optionalService from "discourse/lib/optional-service";
    
    export default class Something extends Component {
      @optionalService categoryBannerPresence;
    
  • В инициализаторах API у вас есть доступ к api.container:

    apiInitializer((api) => {
      const router = api.container.lookup("service:router");
    
  • А для прямой замены существующего кода можно использовать:

    import { getOwner } from "@ember/application";
    
  • …или, если вам всё ещё нужна резервная обёртка (в контексте, отличном от компонента/контроллера/маршрута/виджета), используйте:

    import { getOwnerWithFallback } from "discourse-common/lib/get-owner";
    

Этот документ находится под версионным контролем — предлагайте изменения на GitHub.

7 лайков