这在控制器中未定义(ember、3.x)

this is undefined in controller (ember, 3.x)

运行 变成了 ember (v.3.x) 的问题,无法弄清楚原因。我在文档和这里都没有找到任何东西(在我的案例中有效)。

所以,问题来了:这个 return 在我的控制器中计算的 属性 (undefined.get('filter')) 中未定义。我的功能的其余部分有效,所以我没有把它放在这里。

// in dic.js (controller):
export default Controller.extend({
  filter: '',
  filteredTerms: computed('filter', () => {
     const x = this.get('filter');
     // ...
}),

对应的输入域:

// in dic.hbs
{{input value=filter}}

在我的路线中,我只是 return 模型,它应该被那个函数过滤。

答案很简单:不要对计算使用箭头函数。这应该有效:

filteredTerms: computed('filter', function () {
  const x = this.get('filter');
  // ...

这是普通函数和箭头函数的根本区别。箭头函数没有自己的 this-context。 this 箭头函数内部始终与外部相同。好吧,在这种情况下,它确实在对象之外,因此是全局上下文。所以你得到 window/undefined 取决于你是否处于严格模式。

一般规则:

  • 如果要访问外部 this 或根本不使用 this,请使用箭头函数
  • 需要 this-context
  • 时使用普通函数