多个布尔值上的 Knockout.js“如果绑定”

Posted

技术标签:

【中文标题】多个布尔值上的 Knockout.js“如果绑定”【英文标题】:Knockout.js "if Binding" on multiple booleans 【发布时间】:2013-02-24 19:04:38 【问题描述】:

是否可以在多个布尔值上使用 Knockout 的 if binding

<div data-bind="if: (property.aTrueValue && property.anotherTrueValue)">...

我尝试了很多不同的语法,但似乎找不到正确的语法。 我不确定这是否可能。

【问题讨论】:

jsfiddle.net/daedalus28/6hxvQ 【参考方案1】:

当 Knockout 处理您的绑定时,它首先评估您的表达式。

如果表达式产生一个 observable,它会评估 observable 以方便获取 if: 起作用的最终值。

所以以下两个工作相同

<div data-bind="if: foo"></div>
<div data-bind="if: foo()"></div>

一旦你离开了以 observable 结尾的简单表达式的世界,你可能还想把糖抛在脑后,总是自己评估 observables(如果没有别的,为了理智)。

试试下面的

<div data-bind="if: (property.aTrueValue() && property.anotherTrueValue())">...

【讨论】:

谢谢,这正是我需要做的。【参考方案2】:

你可以 - if 绑定只需要一个任意表达式。当做的不仅仅是像这样引用 observable 的值时,你需要像这样实际调用 observable:

<div data-bind="if: (property.aTrueValue() && property.anotherTrueValue())">...

这是一个有效的jsfiddle。

【讨论】:

【参考方案3】:

目前的解决方案更像这样:

<div data-bind="if: (prop() === true && prop2() === true)">...

【讨论】:

以上是关于多个布尔值上的 Knockout.js“如果绑定”的主要内容,如果未能解决你的问题,请参考以下文章

在 [重复] 中调用布尔值上的成员函数 execute()

布尔值上的 ng-repeat 过滤器

单选按钮的 knockout.js 布尔数据绑定问题

检查约束或默认值上的ForceType

Knockout.Js 中的多个 afterAdd 调用

Knockout.js 文本绑定 - 折叠多个空格