2016-07-10 7 views
0

私はHTMLビューでいくつかの入力を持っています。そのような機能を追加したいと思います。入力上にマウスを置いてマウススクロールを使用すると、その値入力が変更されます(テキスト入力の場合は配列から別のインデックスを選択し、数値の場合は昇順/降順の値を選択します)。 eventバインディングを使用すると、私はこれらの入力と異なる設定に異なるビューモデルを使用しているので、私にとってはそれほど十分ではありません。したがって、私は観察可能な値を拡張するエクステンダを使用することを考えていましたが、そのエクステンダー内の要素の上にマウスを置く)。エクステンダーは正しい方法ですか、代わりにビュー側のeventバインディングに固執する必要がありますか?knockout.jsでマウススクロールの入力値を変更する

答えて

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); 
    } 
}; 

Working fiddle

関連する問題