Aurelia刷新属性依赖项

时间:2016-12-19 12:00:28

标签: aurelia aurelia-binding

验证复选框是否应显示在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

3 个答案:

答案 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会更好。