2016-04-28 44 views
0

我有一個類,看起來像這樣:我怎麼能對財產作出反應改變

export class Transaction { 

    public status: string; 
    public nextStatus: string; 
    public previousStatus: string; 

    private getNextStatus(): string { 
     // ... 
    } 

    private getPreviousStatus(): string { 
     // ... 
    } 
} 

每次狀態屬性改變,我想重新計算下一個和以前的狀態。有沒有辦法傾聽財產變化?

我無法使用函數來設置狀態,因爲這些對象是從數據庫中檢索並從JSON中解析出來的。所以,不幸的是這是行不通的:

public setStatus(newStatus: string) { 
    this.status = newStatus; 
    this.nextStatus = this.getNextStatus(); 
    this.previousStatus = this.getPreviousStatus(); 
} 
+1

這不是一個真正的打字問題,在運行時你只有javascript。過去有一些API(例如[Object.prototype.watch()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/watch),但作爲據我所知,標準中沒有任何標準,你可能需要自己處理這個問題,添加'javascript'標籤。 –

回答

0

一下怎麼樣當前事務對象,如果從JSON /數據庫調用得到一個新的交易:

currentTxn.setStatus(newTxn.status) 

,然後扔掉newTxn。

請注意,如果您正在處理多線程,另一個線程可能會看到狀態,但會讀取prevStatus,並且這兩個值將不一致。您可以通過讓setStatus使用事務內存或鎖定對Transaction中的任何字段的訪問來避免這種情況。