有条件绑定在Knockoutjs功能(Conditionally bind a function i

2019-10-29 19:01发布

<div data-bind="foreach: passengers">                       
<a href="#" data-bind='style: { color: isOwner  ? "orange" : "darkgreen" }, 
text: person_username, click: function() { $root.removePassenger($data, $parent); } '>


说我有这样的一个模板。 如果isOwner是真实的点击功能只应约束。 有一个简单/简单的方法来做到这一点? 我猜我可能爆发全面的jQuery模板和得到的东西做了,但我想知道一个更优雅的解决方案。

谢谢。

Answer 1:

什么你问 - 处理只有当某些属性设置点击事件 - 是应用逻辑。 应用程序逻辑并不在视图中的归属。 它属于在视图模型。

当然,你可以这样做:

click: function() { if ($data.isOwner) $root.removePassenger($data, $parent); }

但是,同样的,这把逻辑在你看来,这是在从分离的,关注和调试的角度来看皱起了眉头,这uglifies你的HTML。

我建议做这样的:

<div data-bind="foreach: passengers">                       
   <a href="#" data-bind='style: { color: isOwner  ? "orange" : "darkgreen" }, 
      text: person_username, click: function() { $root.removePassengerIfApplicable($data, $parent);"</a>
</div>

而JavaScript:

function removePassengerIfApplicable(passenger, parent) {
    if (passenger.isOwner) {
        removePassenger(passenger, parent);
    }
}

UPDATE

这是不是从你的文章,你不想显示一个链接,如果isOwner = FALSE清楚。 下面是一些你更新后的代码:

<div data-bind="foreach: passengers">  
   <div data-bind="if: isOwner">                     
      <a href="#" style="color: orange" 
      text: person_username, click: function() { $root.removePassenger($data, $parent); }"</a>
   </div>
   <div data-bind="if !isOwner()">
      <span style="color: darkgreen" data-bind="text: person_username"></span>
   </div>
</div>

上面的代码显示如果isOwner的链接,以及明文跨度如果不是。



文章来源: Conditionally bind a function in Knockoutjs
标签: knockout.js