2016-02-24 79 views
1

我有點新淘汰js。我有一個基於可觀察變量啓用或禁用的按鈕。 看來,只有當我用括號括起來,綁定才起作​​用。淘汰賽的綁定不工作沒有括號

有人知道爲什麼會發生這種情況?我的理解是,我們應該能夠綁定觀測變量沒有括號

self.noTaxResidencyChecked = ko.observable(false); 

//works fine 
<button data-bind="enable: !noTaxResidencyChecked()"></button> 

//doesn't work 
<button data-bind="enable: !noTaxResidencyChecked"></button> 

回答

2

這歸結爲對象的truthy(尼斯)。這是在javascrpt中工作的默認方式。當你使用'!'運算符標準的JavaScript比較踢

var x = ko.observable(null);

!X //如此 - 觀察的本身就是一個對象,其計算結果爲true !X()//錯誤 - 你現在看到的可觀察到的是空內的對象,計算結果爲false

無論何時使用!運營商在標記

// true if it evaluates to true 
<button data-bind="enable: !noTaxResidencyChecked()"></button> 

// true no matter what because the property is an observable object 
<button data-bind="enable: !noTaxResidencyChecked"></button> 

什麼你可能做

<button data-bind="disable: noTaxResidencyChecked"></button> 
// since you are not using a '!' knockout does its standard look into the object 

,但可能不適合你的需求