Почему я получаю сообщение "this is undefined" в моих методах компонента Octane?

Я пишу некоторые компоненты в стиле Octane в Ember v3.13 вместе с {{did-insert}} тлеющий модификатор рендеринга. Однако, когда функция привязана кdid-insert называется, я получаю TypeError: this is undefined. Что я делаю не так?

Вот мой шаблон компонента:

<div class="cardhost-monaco-container" {{did-insert this.renderEditor}}></div>

А вот и класс JavaScript компонента:

import Component from '@glimmer/component';


export default class CodeEditor extends Component {
  renderEditor(el) {
    console.log(this.args.code)
  }
}

1 ответ

Решение

Методы, которые используются как действия в шаблонах, необходимо украсить @action иметь правильный this-контекст:

import Component from '@glimmer/component';
import { action } from '@ember/object';

export default class CodeEditor extends Component {
  @action
  renderEditor(el) {
    console.log(this.args.code)
  }
}

Декоратор действия связывает контекст компонента с методом. Более подробно это описано в документации API дляaction.

Другие вопросы по тегам