求めているのは、一部のプロパティが設定されている場合にのみクリックイベントを処理するアプリケーションロジックです。アプリケーションロジックはビューに属していません。ビューモデルに属しています。
確かに、あなたは次のようなことをすることができます:
click: function() { if ($data.isOwner) $root.removePassenger($data, $parent); }
しかし、繰り返しになりますが、これは関心の分離とデバッグの観点から嫌われているロジックをビューに配置し、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);
}
}
アップデート
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の場合はリンクを示し、そうでない場合はプレーンテキストスパンを示しています。