计算一个信号?

时间:2016-06-27 18:41:32

标签: aurelia aurelia-binding

是否可以在信号上建立@computedFrom?类似的东西:

@computedFrom({signals: ["mySignalKey"]})

@signaledFrom("mySignalKey1", "mySignalKey2")

在我有一个属性的用例中会有所帮助,该属性的值是根据对象数组中每个对象的属性计算的。

(或许还有更好的方法?)

3 个答案:

答案 0 :(得分:2)

@computedFromsignal都告诉绑定系统何时更新。 @computedFrom解决了一个特定问题,在属性更改时进行更新signal解决了一般问题,每当发出信号时都会更新。因此,您可以使用signal执行与@computedFrom相关的所有操作,因此不需要同时使用这两者。

为了向绑定系统发出计算值的更新信号,请使用函数计算值,具有以下模式:

<强> transactions.html

<table>
    <tr repeat.for="entry of transactions">
        <td>${entry.value}</td>
    </tr>
    <tr><td>Total: ${getTotal() & signal: 'value-update'}</td></tr>
</table>

<强> transactions.js

import { inject } from 'aurelia-framework';
import { BindingSignaler } from 'aurelia-templating-resources';

@inject(BindingSignaler)
export class TransactionsViewModel {

    constructor(BindingSignaler) {
        this.signaler = BindingSignaler;
        this.transactions = window.fetch('transactions');
    }

    // call somewhere to update a particular entry by a particular amount, 
    // and signal to the binding system to recompute the total
    updateValue(entry, amount) {
        entry.value += amount;
        this.signaler.signal('value-update');
    }

    // sums the values of all transactions
    getTotal() {
        return this.transactions.reduce((value, entry) => value + entry.value, 0);
    }
}

见要点:https://gist.run/?id=d6c534d7b0a1b26fc3f27366b0e5b7a2

答案 1 :(得分:0)

解决马修·詹姆斯·戴维斯的回答:好的,你们在这里所做的不同之处在于,你不是使用计算属性作为总数,而是调用函数&#34; getTotal()& #34;

这并没有真正解决我正在寻找的问题,它只能通过使用函数而不是计算属性来解决它。我的问题特别提出与计算财产有关。

换句话说,我期待一个允许我继续使用计算属性的答案。

但是我意识到我的问题可能不太公平,也许它真的应该作为Aurelia的功能要求提出。所以,为了感谢你的努力,并假设一个更好的答案真的不会即将到来,我会继续把你的作为答案。

答案 2 :(得分:-1)

在表达式中添加& oneTimehttps://gist.run/?id=51deb418e8ea31b6e7ec443442539acc