2016-01-21 50 views
1

我想使用屬性依賴關係來避免對計算屬性進行髒檢查。由於計算屬性所依賴的屬性不是基元,而是對象的屬性,所以我不知道如何使其工作。對象屬性的屬性依賴關係

代碼:

import {computedFrom} from 'aurelia-framework'; 

export class Person { 
    personData = { 
     firstName: 'John', 
     lastName: 'Doe', 
     // More attributes... 
    } 

    // ... 

    // Doesn't work: 
    @computedFrom('personData.firstName', 'personData.lastName') 
    // Neither does: 
    // @computedFrom('personData["firstName"], 'personData["lastName"]') 
    // Nor: 
    // @computedFrom('personData') 
    get fullName() { 
     return `${this.personData.firstName} ${this.personData.lastName}`; 
    } 

    // ... 
} 

回答

2

@computedFrom屬性將很快添加對以下詞組盯緊https://github.com/aurelia/binding/pull/276

支撐警告字 - 過度使用@computedFrom(例如@computedFrom(p1.p2.p3, p4.p5, p6, p7, p8))最終可能會比髒檢查性能低。在觀察者的一次性設置與連續功能評估之間有一個折衷與髒檢查 - 你的里程可能會有所不同。

另一種選擇是使用with在您看來約束力,直接綁定到你的對象道具:

<span with="personData">${firstName} ${lastName}</span> 

最後但並非最不重要的,還有的aurelia-computed插件,它可以解析getter函數機構和生產觀察員不使用髒檢查:https://github.com/jdanyow/aurelia-computed

+0

已添加回來嗎? –

0

我想補充觀察家對personData屬性(https://stackoverflow.com/a/28437456/3436921)和手動設置fullName

使用@computedFrom( 'personData'),並始終創造新personData當屬性改變this.personData = Object.assign({}, this.personData, {firstName: "new first name"})

+0

如果事實證明'computedFrom'裝飾器不支持對象屬性,那麼觀察者將是一個選項。第二個建議是沒有選擇的,因爲'personData.firstName'和'personData.lastName'綁定到UI輸入控件,並且手動攔截數據流以始終創建一個新的'personData'對象太麻煩了,沒有好的樣式。 – suamikim