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

ren*_*thy 1 knockout.js

如果满足某些标准,是否有办法在淘汰赛中应用一个绑定,如果不满足这些标准,则不应用此绑定?

<div data-bind="custombinding: $data.values"></div>
Run Code Online (Sandbox Code Playgroud)

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

确切的例子更复杂。

Jer*_*oen 6

我认为您通常不应该使不同的绑定相互依赖。相反,创建对逻辑视图模型属性的依赖(这也允许您轻松地对涉及的逻辑进行单元测试)。你已经提到你有这样的财产:canEdit,我认为是一个布尔值。

如果你这样做,你可以创建像这样的自定义绑定:

<div data-bind="custombinding: { onlyIf: canEdit, vals: values }"></div>
Run Code Online (Sandbox Code Playgroud)

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

<!-- ko if: canEdit -->
<div data-bind="custombinding: values"></div>
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)

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

<div data-bind="custombinding: !!canEdit() ? values : []"></div>
Run Code Online (Sandbox Code Playgroud)

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


但是,直接转到所问的问题,如果您查看自定义绑定文档,您会发现您可能会做您想做的事,因为绑定处理程序可以访问:

  • allBindings对于该特定元素;也
  • bindingContext.$data访问视图模型(例如canEdit通过它查找)

不可能给出更准确的答案或指导,因为你的问题细节很少。