为什么在我的Octane组件方法中得到“ this is undefined”?

han*_*ars 1 ember.js ember.js-3 ember-octane

我正在Ember v3.13中编写一些Octane风格的组件,以及{{did-insert}} ember-render-modifier。但是,当绑定到的函数did-insert被调用时,我得到了TypeError: this is undefined。我究竟做错了什么?

这是我的组件模板:

<div class="cardhost-monaco-container" {{did-insert this.renderEditor}}></div>
Run Code Online (Sandbox Code Playgroud)

这是组件的JavaScript类:

import Component from '@glimmer/component';


export default class CodeEditor extends Component {
  renderEditor(el) {
    console.log(this.args.code)
  }
}
Run Code Online (Sandbox Code Playgroud)

han*_*ars 6

模板中用作操作的方法需要修饰@action以具有正确的this-context:

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

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

动作装饰器将组件上下文绑定到方法。的API文档中action对此进行了详细说明。