是否可以在信号上建立@computedFrom?类似的东西:
@computedFrom({signals: ["mySignalKey"]})
或
@signaledFrom("mySignalKey1", "mySignalKey2")
在我有一个属性的用例中会有所帮助,该属性的值是根据对象数组中每个对象的属性计算的。
(或许还有更好的方法?)
答案 0 :(得分:2)
@computedFrom
和signal
都告诉绑定系统何时更新。 @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);
}
}
答案 1 :(得分:0)
解决马修·詹姆斯·戴维斯的回答:好的,你们在这里所做的不同之处在于,你不是使用计算属性作为总数,而是调用函数&#34; getTotal()& #34;
这并没有真正解决我正在寻找的问题,它只能通过使用函数而不是计算属性来解决它。我的问题特别提出与计算财产有关。
换句话说,我期待一个允许我继续使用计算属性的答案。
但是我意识到我的问题可能不太公平,也许它真的应该作为Aurelia的功能要求提出。所以,为了感谢你的努力,并假设一个更好的答案真的不会即将到来,我会继续把你的作为答案。
答案 2 :(得分:-1)
在表达式中添加& oneTime
:
https://gist.run/?id=51deb418e8ea31b6e7ec443442539acc