パーミッションUIを構築しています。パーミッションのリストがあり、各パーミッションの横に選択リストがあります。権限は、選択リストにバインドされているオブジェクトの監視可能な配列によって表されます。
<div data-bind="foreach: permissions">
<div class="permission_row">
<span data-bind="text: name"></span>
<select data-bind="value: level, event:{ change: $parent.permissionChanged}">
<option value="0"></option>
<option value="1">R</option>
<option value="2">RW</option>
</select>
</div>
</div>
ここで問題となるのは、UIが初めて入力されたときに、変更イベントが発生することです。ajax関数を呼び出し、権限リストを取得すると、権限アイテムごとにイベントが発生します。これは本当に私が望む振る舞いではありません。ユーザーが選択リストでアクセス許可の新しい値を実際に選択した場合にのみ発生させたいのですが、どうすればよいですか?
select
要素へのキーとして文字列を渡すことをテストしました。ただし、selectの初期値がオプションの1つと一致した場合でも、change
イベントがトリガーされました。この単純なif
ブロックをハンドラーに実装すると、すべてが期待どおりに機能しました。最初にこの方法を試してください。ありがとう、@ Sarath!