我正在更改控制器中属性的值,而帮助程序无法重新计算它们。
此处的示例代码:
我的模板看起来像
{{#if (my-helper info)}}
<span>Warning</span>
{{/if}}
在我的控制器中,
changeAction: function() {
let that = this,
info = that.get("info");
set(info, "showWarning", true);
}
我的助手,
import { helper as buildHelper } from '@ember/component/helper';
export default buildHelper(function(params) {
let that = this,
info = that.get("info");
if(info.showWarning ) {
return true;
} else {
return false
}
});
答案 0 :(得分:1)
我看到您的代码有几个问题:
模板帮助器似乎获得了一个对象,因为它是第一个也是唯一的位置参数:{{my-helper info}}
,而info
是{ showWarning: true }
。如果传递给它的值发生更改,则模板帮助程序会重新计算,但如果该值的属性发生更改,则不会进行重新计算。快速解决方法是{{my-helper info.showWarning}}
。
在模板帮助器中,您正在尝试访问其this
上下文中的属性。据我所知,不支持。当您使用位置参数时,它是第一个参数,因此可以作为params
数组中的第一个条目使用。因此您的模板助手应该看起来像:
export default buildHelper(function([info]) {
if(info.showWarning ) {
return true;
} else {
return false
}
});
您使用的是哪个版本的Ember?如果大于等于3.1,则无需在控制器中使用this.get()
。如果您使用的是Ember <3.1,则还需要在模板帮助程序中使用info.get()
。
但是如前所述,我不建议将对象传递给模板帮助器,因为只有在替换了对象本身时,它才会更新。仅更改其属性是不够的。您可能可以使用Class-based Helpers来这样做,但我不建议这样做,因为它是错误的修剪。