验证复选框是否应显示在html页面中:
get canPerformCommand() {
let r = false;
let valids = ['Success', 'Error'];
if (this.requests.length == 0) return false;
if (valids.indexOf(this.myresult[0].requestStatus) > 0) {
r = true;
}
return r;
}
Html页面:
<span if.bind="canPerformCommand" class="panel-heading-buttons">
<button click.trigger="confirm()">Confirm</button>
</span>
搜索:
return this.myService.getRequests()
.then(data => {
this.requests = data
//Somehow refresh canPerformCommand here?
});
第一页加载时 this.requests
将为空,结果为canPerformCommand = false
。
我想在使用搜索功能时刷新canPerformCommand
。
目前canPerformCommand
在搜索完成后不会自行刷新。
如何使用Property Dependencies搜索后刷新canPerformCommand
?
答案 0 :(得分:0)
<强>解决方案:强>
最简单,最合理的解决方案是将canPerformCommand
更改为两个独立的实体 - 标志变量和函数。将标记变量设为canPerformCommand
并保留if.bind=canPerformCommand
,但将函数名称更改为updateCanPerformCommand()
,以便您可以通过return this.myService.getRequests()
{{1}轻松调用此函数功能。
<强>详细信息:强>
像这样设置你的视图模型:
.then
答案 1 :(得分:0)
我认为您需要在myresult
getter中将requests
更改为canPerformCommand
:
get canPerformCommand() {
let r = false;
let valids = ['Success', 'Error'];
if (this.requests.length == 0) return false;
if (valids.indexOf(this.requests[0].requestStatus) > 0) {
r = true;
}
return r;
}
由于Aurelia将对此吸气剂进行脏检查,因此每200ms会调用一次。为避免这种情况,您可以添加computedFrom
装饰器:
import {computedFrom} from 'aurelia-framework';
export class MyClass {
....
@computedFrom('requests')
get canPerformCommand() { ....
答案 2 :(得分:0)
我换了:
if (valids.indexOf(this.myresult[0].requestStatus) > 0) {
r = true;
}
使用
if (valids.includes(this.requests[0].requestStatus)) {
r = true;
}
现在它有效。我在其他页面上也使用了indexOf函数,奇怪的是它在大多数页面上都有用。在我的模型中一定有问题。
另外,我同意使用computedFrom会更好。