JQM レンジ スライダーをノックアウトでうまく動作させるのに苦労しています。これは、JQM スライダーの非常に基本的な html コードです。
<input type="range" name="quantity-slider" id="quantity-slider" min="0" max="10">
サンプルとして、このノックアウト バインディングを作成し、ドキュメント準備完了に適用しました。
var ViewModel = function() {
this.quantity = ko.observable(4);
}
$(document).ready(function () {
ko.applyBindings(new ViewModel());
});
範囲スライダーのJQM初期化に関連するいくつかの問題を発見した他の人々からのいくつかの投稿をインターネットで読みました(たとえば、ここ: http ://css.dzone.com/articles/knockoutjs-binding-helperおよびここ:http ://www.programico.com/1/post/2012/12/knockoutjs-jquerymobile-slider.html ) を参照し、それぞれ独自のカスタム バインディング実装を備えた実用的なソリューションを提供します。
それらの1つは次のとおりです(http://www.hughanderson.com/による):
data-bind="value: quantity, slider: quantity"
ここまでは順調ですね。その後、私はこの問題に遭遇します:
JQM スライダーが最初のページにある場合は機能します。JQM スライダーが 2 ページ目にある場合、もう機能しません。
私が理解できるように、これはこの特定の JQM ウィジェットと彼の DOM 操作に関連する問題だと思います。これをよりよく説明するために、2 つの jsFiddle を作成しました。ここでは、2 つの JQM ページの順序を入れ替えるだけです。
- 動作しない: http://jsfiddle.net/5q38Q/ 2 番目の JQM ページのスライダー
- 動作: http://jsfiddle.net/5q38Q/1/最初の JQM ページのスライダー
JQMスライダーのノックアウトバインディングを初期化する正しい方法はどれですか?JQM スライダーのカスタム バインディングを記述する別の方法があるのでしょうか、それともノックアウト バインディングを pagebeforeshow イベントに配置する必要があるのでしょうか。
更新: 次の変更により、スライダーは正しい値を表示し、テキスト入力部分とも同期されます。
$(document).on('pagebeforeshow', '#slider-page', function(){
$('#quantity-slider').val(viewModel.quantity());
$('#quantity-slider').slider('refresh');
});
しかし、より良い解決策がないのではないかと思います。
少なくとも、Varun のカスタム バインディングと組み合わせると、今では非常にうまく機能しています。