条件绑定:仅在满足某些条件时应用绑定

时间:2015-05-12 13:47:38

标签: knockout.js

如果符合某些条件,是否有办法在敲除中应用一个绑定,如果不满足这些标准,则不应用此绑定?

<div data-bind="custombinding: $data.values"></div>

如果$data.canEdit为真,我需要应用此绑定,否则我不需要应用此绑定。

确切的例子比较复杂。

2 个答案:

答案 0 :(得分:3)

我认为你通常不应该根据彼此的不同来制作不同的绑定。相反,创建对逻辑视图模型属性的依赖(这使您可以轻松地对涉及的逻辑进行单元测试)。你已经提到过你有这样一个属性:canEdit,我认为是一个布尔可观察的。

如果这样做,您可以创建如下所示的自定义绑定:

<div data-bind="custombinding: { onlyIf: canEdit, vals: values }"></div>

此外,我还提出了第二个@JeremyBarnes的建议(使用if绑定),例如:

<!-- ko if: canEdit -->
<div data-bind="custombinding: values"></div>
<!-- /ko -->

此外,如果必须,您可以在视图中包含以下内容:

<div data-bind="custombinding: !!canEdit() ? values : []"></div>

作为旁注,我建议将三元运算符的逻辑封装在计算的可观察量中。

然而,直接回答问题,如果你检查the custom binding documentation,你会发现你可以做你想做的事,因为绑定处理程序可以访问:

  • allBindings该特定元素;以及
  • bindingContext.$data访问视图模型(例如,查找canEdit

不可能提供更准确的答案或指导,因为您的问题在细节上相当低。

答案 1 :(得分:1)

Try the knockout if-binding.

如果条件不满足,则该绑定会遗漏HTML(将排除div)。

否则,您需要将其绑定到有条件设置的JS中的对象。