2016-06-27 64 views
0

是否有可能將@computedFrom作爲信號的基礎?是這樣的:computedfrom一個信號?

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

@signaledFrom("mySignalKey1", "mySignalKey2") 

這將有助於在一個用例在那裏我有它的值是一個屬性計算每個許多對象的對象數組的屬性。

(或者,也許已經有一個更好的辦法?)

+0

我知道有一直立足建議這樣的計算上的支持特性,但似乎有點像黑客對我來說,雖然比較簡單,我知道了。 –

+0

讓我知道如果這個解決方案爲你工作,upvote和接受,如果是這樣 –

回答

1

兩個@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> 

交易.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

如果這回答你的問題,請不要忘記接受和upvote。如果我誤解了你的問題,請在你原來的問題中澄清,我會重新回答這個問題。 –

+0

謝謝馬修。這個答案依賴於髒檢查來評估'total'計算屬性是否已經改變。我試圖避免這一點 - 使用@computedFrom背後的整個想法。如果我可以指定基於信號來重新評估Propery,那麼我會解決骯髒檢查的問題。 –

+0

你說得對。讓我看看我能否爲你找到更好的答案。對於那個很抱歉。要點在這裏:https://gist.run/?id=aa5188c1ffd6f180d7dba4ffbc004cca –

-1
+0

「已檢查」已被記錄13k次,而我吃了午餐;-) –

+0

我沒有在任何地方看到「onetime」....在任何情況下,oneTime都會阻止總共被信號更新 –

+0

哎呀,是我第一個主要的跑(從馬修的要點被劫持)沒有保存它。請再次檢查: https://gist.run/?id=51deb418e8ea31b6e7ec443442539acc – fops

0

尋址從馬修詹姆斯戴維斯的回答:OK,你做了什麼不同的這裏是代替使用總一個計算屬性,你打電話函數「getTotal()」。

這並不能真正解決我一直在尋找的問題,只能通過使用功能,而不是計算財產的工作解決它。我的問題特別提出與計算房產有關。

換句話說,我期待一個答案,讓我繼續使用計算性能。

但我意識到,我的問題是,也許不是真正的公平,也許真的應該提出作爲奧裏利亞功能請求。所以,爲了感謝你的努力,並假設一個更好的答案實際上不是即將到來的,我將繼續並將你的答案標記爲答案。