如果没有括号,则敲除绑定不起作用

时间:2016-02-24 16:37:55

标签: knockout.js

我对淘汰赛有点新鲜。我有一个基于可观察变量启用或禁用的按钮。 看来绑定只有在我用括号时才有效。

任何人都知道为什么会这样吗?我的理解是我们应该能够绑定没有括号的可观察变量

self.noTaxResidencyChecked = ko.observable(false);

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

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

1 个答案:

答案 0 :(得分:2)

这归结为一个物体的真实(ness)。这是javascrpt中默认的工作方式。当你使用'!'时运营商标准的javascript比较开始

var x = ko.observable(null);

!! x // true - observable本身是一个计算结果为true的对象 !! x()// false - 您现在正在查看observable中的对象,该对象为null,并且计算结果为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

但这可能不符合您的需求