将可见参数绑定到Knockout中的'或'语句

PlT*_*lor 27 javascript knockout.js

当两个条件之一为真时,我想将可见属性绑定为true.像下面这样的东西

 <tr data-bind="visible: active || $parent.displayDeactive">....</tr>
Run Code Online (Sandbox Code Playgroud)

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

RP *_*yer 41

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

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

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

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

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


Joh*_*apa 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>
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到完整的代码:http://jsfiddle.net/johnpapa/gsnUs/

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