1

テーブルにチェックボックス列があります。ユーザーがチェックボックスをクリックした場合にのみイベントをトリガーしたい。しかし、私の場合、テーブルの行をバインドしている間でもイベントがトリガーされます。

ビューモデルのイベント

 self.UpdateData = function (item, value) {               
                $.ajax({                       
                })
            });

こんな感じで縛っています。

 data-bind="checked: flag, click: $root.UpdateData($parent.RowNumber(), flag())" 

UpdateData()テーブル行のレンダリング中にイベントがトリガーされる理由を誰かに教えてもらえますか?

4

1 に答える 1

2

clickまず、Knockout ではバインディングに式を提供できません。この方法でバインドすることに興味がある場合は、私のKnockout.Punchesプラグインをチェックしてください。そうでない場合は、式を無名関数でラップする必要があります。

click: function() { $root.UpdateData($parent.RowNumber(), flag()); }

第二に、これを行うと別の問題が見つかります。デフォルトでは、 Knockoutclickはイベントがバインドされているときにイベントのデフォルトの動作を防止するため、ハンドラーはチェックボックスの変更を防止します。デフォルトの動作を有効にするreturn trueには、関数に次を追加する必要があります。

click: function() { $root.UpdateData($parent.RowNumber(), flag()); return true; }

click3 番目に、チェックボックスを使用してバインディングを追加しないようにすることをお勧めします。checkedチェックボックスのステータスでオブザーバブルを更新するバインディングはすでにあります。配列にバインドするオプションもありますchecked。この場合、配列からチェックボックスの値を追加または削除します。

data-bind="attr: {value: $parent.RowNumber()}, checked: $root.selectedRows"
于 2013-09-26T03:36:04.710 に答える