0

HTMLビューにいくつかの入力があり、そのような機能を追加したいと思います.入力の上にカーソルを置いてマウススクロールを使用すると、その入力の値が変化します(テキスト入力の配列から別のインデックスを選択するか、昇順します数値の場合は /descend 値)。これらの入力と異なる設定に異なるビューモデルを使用しているため、バインディングを使用eventするだけでは十分ではありません。したがって、監視可能な値を拡張するエクステンダーを使用することを考えていましたが、イベントをターゲットにする方法がよくわかりません (mousescrollそのエクステンダーで要素の上)。エクステンダーは正しい方法ですか、それとも代わりeventにビュー側のバインディングを使用する必要がありますか?

4

1 に答える 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 に答える