ember.js - 这在 Controller 中未定义(ember,3.x)

标签 ember.js controller this undefined

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

所以,这就是问题所在:这在我的 Controller 中的计算属性 (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}}

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

最佳答案

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

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

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

一般规则:

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

关于ember.js - 这在 Controller 中未定义(ember,3.x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51589894/

相关文章:

ruby-on-rails - Rails : Show 5 most recent posts excluding the most recent post

jQuery - 通过 $(this) 访问层次结构上五层的父 <li>

javascript - 如何让 Ember.js 工作?

javascript - 页面刷新后数据丢失

ember.js - 无法在 Ember.js 中渲染模板部分

php - Symfony2 : Solution for repeating a code within each new controller

asp.net-mvc - MVC 架构中的项目何时应该拥有自己的 Controller ?

javascript - this.property 和带冒号的 property 的区别

c++ - 什么时候 `this` 是右值?

ember.js - 如何测试在组件 Ember 测试中调用的操作