2012-06-12 29 views
26

我是淘汰賽的初學者,我必須說我經常對何時使用()感到困惑。有沒有關於何時使用()的一般提示/技巧,因爲目前我只是在進行反覆試驗。如果綁定拋出錯誤或不更新值,我刪除()否則我把。什麼時候應該在淘汰賽中使用括號

回答

18

在使用observables或執行任何其他方法時,您可以使用()進行挖空。 Knockout observables是函數,用於返回您要查找的內容或允許您分配新值。

在淘汰賽中,您使用object.property()檢索值,並使用object.property(newValue)爲該屬性分配一個值。

在淘汰賽website結帳的文件,特別是在observables,這表明你在查詢和寫observables時使用()

報價:

var myViewModel = { 
    personName: ko.observable('Bob'), 
    personAge: ko.observable(123) 
}; 
  • 要讀取觀察到的電流值,只需調用觀察到的不帶參數。在這個例子中,myViewModel.personName()將 回報「鮑勃」,和myViewModel.personAge()將返回123

  • 要編寫一個新值觀察的,叫觀察到的,並將新的值作爲參數。例如,調用 myViewModel.personName('Mary')將名稱值更改爲'Mary'。

  • 要將值寫入模型對象上的多個可觀察屬性,可以使用鏈接語法。例如, myViewModel.personName(「瑪麗」)。人物(50)將更改名稱 值「瑪麗」和時代價值50

淘汰賽的interactive tutorial也相當不錯,非常值得一試。

3

基本上每當您使用可觀察值(數組或其他)時,您應該使用圓括號來獲取值並設置值

var something = ko.obserbable(); 
something(5); //set value 
console.log(something()); //get value: 5 

原因是,大多數JS實現不支持的屬性getter和setter還,所以觀測得到實施這樣來解決這個限制。

48

我覺得現有的答案跳過了一個非常重要的混淆點:data-bind屬性。

確實,當你使用Javascript時,使用parens並獲取或設置observables。但是當你寫data-bind="text: property"時,即使在使用可觀察物品時,也可以省去零件

編輯

如在下面的評論,綁定是表達式或observbles的訪問屬性指出,需要括號

visible: personName().length > 0 
visible: person().Name().length > 0 
visible: person().isVisible 

注意最後一個personisVisisble都是觀測,但最後的屬性不使用parens!原因是我們將傳遞一個值到binding而不是observable,並且它不會更新。

+5

好的一點,唯一的例外是如果在data-bind屬性中使用JavaScript表達式,在這種情況下括號**是**必需的,例如, 'visible:personName()。length> 0' – benrwb

+0

當使用基於註釋的虛擬綁定時,括號也是必需的,如:<! - ko foreach:observableArray() - >'。我不明白爲什麼會出現這種情況,但從2.3.2開始,情況確實如此。 – x0n

+0

有關在表達式中使用可觀察項的另一個示例,請參見http://stackoverflow.com/a/11318720/1154642。 – bryanbraun