Aurelia 根据信号计算?

Aurelia 根据信号计算?,aurelia,Aurelia,是否可以将@computedFrom基于信号?比如: @computedFrom({signals: ["mySignalKey"]}) 或 如果我有一个属性,它的值是从一个对象数组中的许多对象中的每一个对象的属性计算出来的,那么它在这种情况下会有所帮助 (或者可能已经有更好的方法了?从计算@和信号告诉绑定系统何时更新@computedFrom解决了一个特定的问题,在属性更改时更新,信号解决了一个一般问题,在信号触发时更新。因此,您可以使用signal执行您可以使用@computedFrom执

是否可以将@computedFrom基于信号?比如:

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

如果我有一个属性,它的值是从一个对象数组中的许多对象中的每一个对象的属性计算出来的,那么它在这种情况下会有所帮助


(或者可能已经有更好的方法了?

计算
@和
信号
告诉绑定系统何时更新
@computedFrom
解决了一个特定的问题,在属性更改时更新,
信号
解决了一个一般问题,在信号触发时更新。因此,您可以使用
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>

参见要点:

向表达式添加
&oneTime

回答Matthew James Davis的答案:好吧,这里您所做的不同之处在于,您调用的函数“getTotal()”,而不是对总数使用计算属性

这并不能真正解决我所寻找的问题,它只是通过使用函数而不是计算属性来解决它。我的问题被明确提出是关于计算财产的

换句话说,我希望得到一个允许我继续使用计算属性的答案


但我意识到我的问题可能并不公平,也许它真的应该作为Aurelia的一个特性请求提出。因此,为了感谢您的努力,并且假设没有更好的答案,我将继续并标记您的答案。

如果这回答了您的问题,请不要忘记接受并投票。如果我误解了你的问题,请在你原来的问题中澄清,我会重新考虑这个答案。谢谢马修。这个答案依赖于脏检查来评估
total
computed属性是否已更改。我试图避免这种情况——使用@computedFrom背后的整个想法。如果我可以指定属性应该根据信号重新估值,那么我就解决了脏检查的问题。你是对的。让我看看能不能给你一个更好的答案。很抱歉。要点:道格肯特修正了。再看一眼。谢谢你的帮助!谢谢,但是我应该去哪里看呢?要点没有任何相关内容。我知道有人建议基于支持属性进行计算,但这对我来说似乎有点像黑客,虽然相对简单,我知道。让我知道这个解决方案是否适用于您,在我吃午餐时,如果“检查”已被记录超过13k次,请向上投票并接受我在任何地方都看不到“oneTime”……无论如何,oneTime将阻止signaloops更新总数,是我的第一次gist运行(从matthew的gist中劫持)没有保存它。请再次检查:@DougKent你今天没吃午饭吗?;)现在有一次了,谢谢,但它再次阻止了信号更新总数。将此添加到html中,您可以看到:
计算属性只是一个函数。
<table>
    <tr repeat.for="entry of transactions">
        <td>${entry.value}</td>
    </tr>
    <tr><td>Total: ${getTotal() & signal: 'value-update'}</td></tr>
</table>
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);
    }
}