[解決済み] ノックアウトバインディングでselect時にイベントを変更したいのですが、本当に変更されているかどうかを知るにはどうしたらいいですか?
2023-02-22 02:14:23
質問
私はパーミッションの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が初めてポップアップするときにchangeイベントが発生することです。私はajax関数を呼び出し、権限リストを取得し、そして権限アイテムのそれぞれについてイベントが発生します。これは私が望んでいる動作ではありません。私はそれが発生するようにしたい を発生させたいのです。ユーザーが本当に選択リストで許可のための新しい値を選んだときだけです。 どうすればいいですか?
どのように解決するには?
実は イベントがユーザによって引き起こされたのか、それともプログラムによって引き起こされたのかを知りたいのです。 であり、初期化中にイベントが発生することは明らかです。
ノックアウト方式で
subscription
を追加することは、すべてのケースで役立つわけではありません。
-
未定義のデータでモデルを開始します。
(actual KO initilization)
-
初期データでモデルを更新する
(logical init like load JSON , get data etc)
- ユーザーとの対話と更新
実際にキャプチャしたいステップは3の変更点ですが、2番目のステップで
subscription
が呼び出されます。
そこで、より良い方法は、次のようにイベントの変更に追加することです。
<select data-bind="value: level, event:{ change: $parent.permissionChanged}">
でイベントを検出し
permissionChanged
機能
this.permissionChanged = function (obj, event) {
if (event.originalEvent) { //user changed
} else { // program changed
}
}
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン