在传递给助手的控制器 属性 发生变化时重新计算 Ember 自定义助手
Recompute Ember custom helper on change of a controller property that is passed to the helper
我正在我的控制器中更改 属性 的值,但助手无法重新计算它们。
示例代码在这里:
我的模板看起来像,
{{#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
}
});
我发现您的代码有几个问题:
模板助手似乎得到了一个对象,因为它是第一个也是唯一的位置参数:{{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 这样做,但我不建议这样做,因为它会出错。
我正在我的控制器中更改 属性 的值,但助手无法重新计算它们。
示例代码在这里:
我的模板看起来像,
{{#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
}
});
我发现您的代码有几个问题:
模板助手似乎得到了一个对象,因为它是第一个也是唯一的位置参数:{{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 这样做,但我不建议这样做,因为它会出错。