Ember - 组件 属性 未在模板 hbs 中更新
Ember - Component property is not getting updated in template hbs
我的 component.js
中有一个组件 属性,基于此我将 show/hide 一些数据 template.hbs
案例一:
默认情况下,componentProperty (canShow
) 为 true,但根据数据的某些更改,它将在另一个 computed property
.
中设置为 false
dataChanged: computed( 'data', 'canShow', function () {
let someCalc = doSomeCalc;
if(someCalc !== 0) {
this.set('canShow', false);
}
return someCalc;
});
预期:Canshow
应该是假的,所以模板中的数据应该被隐藏
结果:它被更新为 false,但在模板中数据仍在显示
案例2:
我已经在计算中使用 getter 和 setter 进行了尝试。
canShowTemplateData: computed('canShow', {
get() {
return this.get('canShow');
},
set(key, value) {
return value;
}
});
即使在这种情况下,set 也能正常工作。但是使用 get() 函数在模板中根本没有更新该值。还请说明在使用 set() 时,应该更新哪个值 canShow
或 canShowTemplateData
?
我错过了什么吗?或者还有其他方法可以解决这个问题吗?
首先,计算属性不应该有副作用。所以永远不要在计算的 属性 中调用 this.set
,或者做类似 this.foo = ...
.
的事情
您的第一个计算 属性 也有问题:它从不返回任何东西。
你的第二个例子 setter 没有意义。你的 setter 什么都没做。
你想要的大概是这样的:
canShow: computed( 'data', function () {
if(it is true) {
return false;
} else {
return true;
}
});
我的 component.js
中有一个组件 属性,基于此我将 show/hide 一些数据 template.hbs
案例一:
默认情况下,componentProperty (canShow
) 为 true,但根据数据的某些更改,它将在另一个 computed property
.
dataChanged: computed( 'data', 'canShow', function () {
let someCalc = doSomeCalc;
if(someCalc !== 0) {
this.set('canShow', false);
}
return someCalc;
});
预期:Canshow
应该是假的,所以模板中的数据应该被隐藏
结果:它被更新为 false,但在模板中数据仍在显示
案例2: 我已经在计算中使用 getter 和 setter 进行了尝试。
canShowTemplateData: computed('canShow', {
get() {
return this.get('canShow');
},
set(key, value) {
return value;
}
});
即使在这种情况下,set 也能正常工作。但是使用 get() 函数在模板中根本没有更新该值。还请说明在使用 set() 时,应该更新哪个值 canShow
或 canShowTemplateData
?
我错过了什么吗?或者还有其他方法可以解决这个问题吗?
首先,计算属性不应该有副作用。所以永远不要在计算的 属性 中调用 this.set
,或者做类似 this.foo = ...
.
您的第一个计算 属性 也有问题:它从不返回任何东西。
你的第二个例子 setter 没有意义。你的 setter 什么都没做。
你想要的大概是这样的:
canShow: computed( 'data', function () {
if(it is true) {
return false;
} else {
return true;
}
});