あなたのクリックハンドラが決して発射しない理由は、あなたの要素に決して適用されていないからです。あなたはjqueryの中でこれを行うときに:
$('.some-class').on('some-event', someFunction);
そして、そのイベントにバインドするためのハンドラのために、最初のjQueryのは、あなたの$('.some-class')
セレクタを見つける必要があります。あなたのケースでは、おそらく#btnParse
は、イベントをバインドするときにノックアウトによってページにレンダリングされません。または、可能であれば、元の要素がレンダリングされ、破棄され、次に別の要素がレンダリングされます。この2番目のシナリオでは、イベントハンドラはボタン上に残りません。一つの選択肢は、(私はお勧めしません)document
レベルでのように、DOMにハンドラ高いアップに結合することで、フィルタのみにイベントID #btnParse
で何かのものである:
$(document).on('click', '#btnParse', function() { console.log('hi'); });
理由I悪いノックアウトの練習であることをお勧めしません。click
バインディングを使用する必要があります。また、id属性を使用していますが、これは一般にテンプレート化された動的コンテンツのための一般的な考えではありません。独自の静的要素のIDが絶対に必要でない限り、クラスを使用します。
ノックアウトのクリックバインディングを正しく使うには、ノックアウトがどのようにスコーピングを行うのかを理解する必要があります。さらに
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction"></a>
<!-- /ko -->
場合、:、たとえば、あなたがループ内でクリックを結合している、とあなたはあなたのメインのビューモデルからハンドラをしたい場合は、ループがあなたのコンテキストが変更されるため、親スコープを参照する必要があなたのハンドラが(this
)で実行さJavascriptのコンテキストを変更する必要があり、その後、あなたはこのようにクリックハンドラをバインドする必要があります。
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction.bind($parent)"></a>
<!-- /ko -->
その原料でビットを再生すると、あなたがしている場合は、新しい質問をしますまだ混乱しています。がんばろう!
ノックアウトをクリックしてクリック機能を追加してみませんか? – Tyrsius
はい、できますし、確かに動作します。しかし、データバインドの使用は、実際にビューモデルに関連するものに予約されている必要があると感じています。私のページ上の要素をさらに操作したい場合は、ノックアウトに頼ってはなりません。私はまた、このような簡単な設定が必要なときにはうまくいかないことに腹を立てています。 –
あなたが指しているメモは、databindのクリック機能のためのもので、jqueryのクリックについては言及していません。 – Tyrsius