Почему я получаю сообщение "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
.