2012-01-10 40 views
26

我想在两个条件之一为真时将可见属性绑定为true。当我做一个或另一个绑定而不是当我把类似下面的将可见参数绑定到Knockout中的'或'语句

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

我的代码的东西工程||在那里。我还没有找到任何文件说我可以在这个绑定中放置任何逻辑,但是如果我不能直接做到这一点,最好的办法是做什么,因为我绑定了一个模板的属性和$的一个对象父视图模型。

回答

39

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

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

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

  • 创建的孩子计算可观测(函数需要能够引用父项)
  • 在父项上创建一个函数,它接收子项并返回您的值(绑定在计算的observable中执行,所以当它访问的任何可观察项改变)
  • 创建对发生在父母和返回值的子功能(同一个音符如上)的结合,并使用父在这里的功能

样的逻辑:http://jsfiddle.net/rniemeyer/f6ZgH/

+0

谢谢,我知道这会变得简单。并感谢您在Knockout上的所有工作。我当然很感激它。 – PlTaylor 2012-01-10 13:33:06

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 “D)。

相关问题