2017-04-03 121 views
-1

我使用的是淘汰賽和打字稿在我的應用程序返回不同的值。 我有一些類:從淘汰賽組件

class Address 
{ 
    State :string; 
    ZIP: string; 
    Street: string; 
} 

我想創建組件,這將是負責更新這個類的對象。我的應用程序的

部分:

var addressObservable = ko.observable(new Address() { State: "aaa", ZIP: "12211", Street: ""}; 

<address-component params="value: addressObservable"> </address-component> 

我的組件(HTML和打字稿VM)的樣子:

<div data-bind="with: address"> 
    <input data-bind="value: State" /> 
    <input data-bind="value: ZIP" /> 
    <input data-bind="value: Street" /> 
</div> 

class AddressComponent<Brand> { 
    public address: KnockoutObservable<Object>; 

    constructor(params: AddressParams) { 
     this.address = params.address; 
    } 
} 

所以,在快捷方式,在我的應用我有一些財產,我送我的組件。組件內部的這個屬性被綁定到一些輸入。

主要的假設是,這componenent將把在「地址」可觀察值:

  1. 「地址」對象(如果某些屬性被填充)

  2. 空(如國家,ZIP和街道屬性是空的)。

我無法將「地址」對象更改爲組件內部的ko.computed。我不想在組件外改變它。 是否有人知道如何做到這一點?

+0

我不知道我的理解你的問題正確......試着讓你的'Address'類的屬性'ko.observable ()'支持雙向通過'value'綁定綁定。你想要的是那個掃帚嗎? – user3297291

+0

好吧,我可以讓他們ko.observable (),但我想有地址類對象作爲ko.observable

(),並放在那裏空或整個對象(取決於所有屬性)。 –

回答

0

如果你把地址的屬性可觀察到的,可以在計算返回null包裹地址實例時,所有的道具都被清除:

function Address() { 
 
    this.line1 = ko.observable("line 1"); 
 
    this.line2 = ko.observable("line 2"); 
 
    this.line3 = ko.observable("line 3"); 
 
}; 
 

 
function App() { 
 

 
    var address = new Address(); 
 
    
 
    this.displayAddress = ko.pureComputed(function() { 
 
    if (address.line1() || 
 
     address.line2() || 
 
     address.line3()) { 
 
     return address;  
 
    } 
 
    
 
    return null; 
 
    }); 
 
    
 
}; 
 

 
ko.applyBindings(new App());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 

 
<div data-bind="with: displayAddress"> 
 
    <p>Clear inputs to see address set to null</p> 
 
    <input data-bind="value: line1"> 
 
    <input data-bind="value: line2"> 
 
    <input data-bind="value: line3"> 
 
</div>