将可见参数绑定到'或'在Knockout中的声明

时间:2012-01-10 12:45:01

标签: javascript knockout.js

当两个条件之一为真时,我想绑定一个visible属性为true。类似于以下内容

 <tr data-bind="visible: active || $parent.displayDeactive">....</tr>

当我执行一个或另一个绑定时,我的代码可以工作,但是当我放置||时,我的代码不起作用在那里。我没有找到任何文档说我可以在这个绑定中放置任何逻辑,但是如果我不能直接做到这一点是什么是最好的方法来做它因为我绑定模板的属性和$的一个对象parent viewmodel。

2 个答案:

答案 0 :(得分:40)

如果在表达式中使用observable的值,则需要将它们作为函数引用。因此,如果activedisplayDeactive是可观察的,您可以这样做:

data-bind="visible: active() || $parent.displayDeactive()"

有几种方法可以将其移至视图模型,您可以:

  • 在子项上创建一个计算的observable(函数需要能够引用父项)
  • 在父项上创建一个接受子项并返回值的函数(绑定在计算的observable中执行,因此当它访问的任何observable发生更改时它将再次触发)
  • 在接收父项的子项上创建一个函数并返回值(与上面相同的注释)

绑定中的逻辑示例以及在父级上使用函数:http://jsfiddle.net/rniemeyer/f6ZgH/

答案 1 :(得分:6)

在观察者之后添加parens,因为你正在评估它们。

<input type="checkbox" data-bind="checked:displayDeactive"> Display deactive</input>
<br/><br/>
<table>
    <tbody data-bind="foreach: products">
        <tr data-bind="visible: active() || $parent.displayDeactive()">
            <td><span data-bind="text:name"></span></td>
        </tr>
    </tbody>
</table>

您可以在此处找到完整代码:http://jsfiddle.net/johnpapa/gsnUs/

您可以在计算表达式的模板化项目上使用计算属性(只是看到@RPNiemeyer也响应了这个......我+ 1)。