3

これが私のjsfiddleの説明です:http: //jsfiddle.net/hawaii/gN6CT/10/

jqueryテンプレートを使用してulにバインドするjsonオブジェクトのリストがあります。各liには、アイテムの詳細とともに、各アイテムのチェックボックスがあります。私がそれを機能させたい方法は次のとおりです。

ユーザーがチェックボックスをクリックすると、アイテムが選択されたリストに更新されます(これが機能するようになりました)

ユーザーがアイテムの詳細をクリックすると、アイテムが選択され、右側にすべての詳細が表示されます。そのため、アイテムの詳細を要素内に配置しています。

フィドルからわかるように、期待どおりに機能していません。viewModelが最初に適用されたときでもクリックバインディングが呼び出され、チェックボックスをクリックするとクリックイベントも呼び出されます。

ノックアウトの達人がこれについて私を助けてくれませんか。ありがとう

4

1 に答える 1

7

私はいくつかの小さなことを見ます:

1-同じ要素でcheckedvalueバインディングの両方を使用しないでください。バインディングは、バインディングvalueと同様に、イベント ハンドラーをアタッチしますchecked。この場合、value属性が設定されていることを確認し、イベントを処理しないようにする必要があるため、次のことができます。checked:$parent.checkedPeople, attr: { value: Id }

2- クリック バインディングは、関数の実行結果ではなく、関数への参照を想定しています。だから、あなたは渡していました:click: $parent.selectPerson(Id())。これにより、バインド中に関数が実行され、結果に対してバインドが試行されます (結果が実際に関数でない限り、これは効果的ではありません)。別の方法は次のとおりclick: function() { $parent.selectPerson(Id()); }です。ただし、マークアップに無名関数を含めるのは見苦しいので、単に次のようにする方がよいでしょう: click: $parent.selectPerson. current$dataは最初の引数として渡され、それを読み取ることができますId

更新されたフィドルは次のとおりです。http://jsfiddle.net/rniemeyer/gN6CT/11/

于 2012-03-08T04:52:23.517 に答える