【问题标题】:this is undefined in controller (ember, 3.x)这在控制器中未定义(ember,3.x)
【发布时间】:2018-07-30 08:31:09
【问题描述】:

遇到了 ember (v.3.x) 的问题,无法弄清楚原因。我在文档和这里都没有找到任何东西(在我的情况下有效)。

所以,问题来了:这在我的控制器中的计算属性 (undefined.get('filter')) 中返回 undefined。我的函数的其余部分工作,所以我没有把它放在这里。

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

对应的输入框:

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

在我的路线中,我只返回模型,它应该被该函数过滤。

【问题讨论】:

  • 试试model.filter
  • model.filter 不起作用。过滤器值来自输入字段,与模型无关...

标签: ember.js controller this undefined


【解决方案1】:

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

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

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

所以一般规则:

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

【讨论】:

  • 感谢您的解释!工作:) 看起来我很明显是盲目的。
猜你喜欢
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 2014-12-18
  • 2015-11-06
  • 2019-09-21
相关资源
最近更新 更多