Emberjs在控制器/路由的函数属性中添加`.property()`

时间:2017-12-12 08:24:37

标签: ember.js

我尝试与this question

做同样的事情

我真正的问题是为什么他必须在.property()属性的函数末尾添加errorClass?有人可以请我指出一份关于这项工作的文件吗?

当我不包含.property()时,该属性的弦乐功能将作为值放在我的模板中。

车把:

<div class="tab-pane fade show {{loginActiveClass}}" id="login" role="tabpanel">

期望:

<a data-toggle="tab" href="#login" role="tab" class="nav-link active">  

当我放弃.property()

时会发生什么
<a data-toggle="tab" href="#login" role="tab" class="nav-link function loginActiveClass() {
  return this.get('page') === 'login' ? 'active' : '';
}">  

1 个答案:

答案 0 :(得分:0)

在hbs中使用{{att}},您可以访问名为att的组件或控制器属性/属性的值。

根据您的说明,您的属性loginActiveClass的值为function。这就是你的车把。由于您使用它的位置只允许字符串值,因此您获得值的toString()表示,对于函数,函数的代码为字符串。

只需在.hbs中使用{{att}}访问功能代码,就无法触发功能代码的实际评估。

在末尾添加.property()会为您提供计算属性,它确实会评估函数并将评估结果返回给“调用者”。 (请注意,Ember中计算属性的首选语法前一段时间已更改为something more explicit。我建议使用eslint和eslint-plugin-ember让IDE或者ember的cli在适当时通知您最佳实践。)< / p>

此外,在您的具体示例中,函数的“逻辑”很容易集成到hbs中:

<div class="tab-pane fade show {{if (eq page 'login') 'active'}}" id="login" role="tabpanel">