这在控制器中未定义(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 时使用普通函数
运行 变成了 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 时使用普通函数