HTMLビューにいくつかの入力があり、そのような機能を追加したいと思います.入力の上にカーソルを置いてマウススクロールを使用すると、その入力の値が変化します(テキスト入力の配列から別のインデックスを選択するか、昇順します数値の場合は /descend 値)。これらの入力と異なる設定に異なるビューモデルを使用しているため、バインディングを使用event
するだけでは十分ではありません。したがって、監視可能な値を拡張するエクステンダーを使用することを考えていましたが、イベントをターゲットにする方法がよくわかりません (mousescrollそのエクステンダーで要素の上)。エクステンダーは正しい方法ですか、それとも代わりevent
にビュー側のバインディングを使用する必要がありますか?
質問する
494 次
1 に答える
1
カスタム バインディング ハンドラーを使用する方法があると思います。モデルから DOM へのすべての通信は、ハンドラーを介して行う必要があります。エクステンダーは、オブザーバブルに追加機能を追加する方法にすぎません。以下は、そのようなハンドラーの例です。
ko.bindingHandlers.wheel = {
init: function(element, valueAccessor) {
var value = valueAccessor();
var handler = function (e) {
var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
value(value() + delta);
};
// IE9, Chrome, Safari, Opera
element.addEventListener("mousewheel", handler, false);
// Firefox
element.addEventListener("DOMMouseScroll", handler, false);
}
};
于 2016-07-10T23:19:54.333 に答える