KnockoutJSで「条件付きクリック」バインディングを作成したいとします。基本的にKnockoutで使用するような標準的なクリックバインディングですが、添付された関数を実行するためには条件を満たしている必要があります。 私の場合、最良の選択肢は、カスタムバインディングハンドラを作成し、それが許可されていれば標準のクリックバインディングを呼び出すことです。カスタムバインディングからKnockoutのクリックバインディングを呼び出す
ko.bindingHandlers.safeClick = {
'init': function(element, valueAccessor, allBindingsAccessor, context) {
$(element).click(function() {
if(mycondition == true) {
// call the standard click binding here -> this is the part I don't know
}
});
}
}
標準のクリックバインディングをこのカスタムバインディングに置き換えたいとします。したがって、クリックバインディングを正しい方法で呼び出すことが重要です。そのため、HTMLで提供されるすべてのパラメータが関数に渡されます。たとえば:あなたはカスタムバインディングで欠落している部分で私を助けることができれば
<a href="#" data-bind="click: basevm.gotopage.bind($data, '#homepage')">Home</a>
<a href="#" data-bind="click: itemvm.activateItem">Activate</a>
これらは、私はそれを非常に感謝し
<a href="#" data-bind="safeClick: basevm.gotopage.bind($data, '#homepage')">Home</a>
<a href="#" data-bind="safeClick: itemvm.activateItem">Activate</a>
で交換する必要があります。
このメソッドは、条件をHTMLコードのノックアウト観測値として渡すことを前提としています。私はこれをしたくない。代わりに、要素をクリックするたびにJavaScriptコードで条件を手動でチェックしたいと考えています。あなたはそれを行う方法についてアドバイスをしていますか? –
'if(ko.utils.unwrapObservable(allBindingsAccessor()。condition))'の代わりに、あなたが望むものを書くことができます。リンクがクリックされるたびに評価されます。私は私のデモjsfiddleのために観察可能な条件が必要でした。 http://jsfiddle.net/w7nKB/2/ – nemesv
通常のクリックバインドとこのカスタムバインディングとの間の問題を説明するために、このフィドル(http://jsfiddle.net/Ed8Fc/)を作成しました。私は、クリックイベントを引き起こしたDOM要素にアクセスする必要があります。通常のクリックバインドでこれはOKですが、safeClickバインディングではブラウザコンソールにエラーが報告されています。 –