我很难让 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)并提供一个可行的解决方案,每个解决方案都有自己的自定义绑定实现。
其中之一如下(来自http://www.hughanderson.com/):
data-bind="value: quantity, slider: quantity"
到目前为止,一切都很好。之后,我遇到了这个问题:
如果 JQM 滑块在第一页上,它可以工作。当 JQM 滑块位于第二页时,不再工作。
我认为这是与这个特殊的 JQM 小部件和他的 DOM 操作有关的问题,我可以理解。为了更好地解释这一点,我制作了两个 jsFiddle,我只是交换了两个 JQM 页面的顺序:
- 不起作用:第二个 JQM 页面上的http://jsfiddle.net/5q38Q/滑块
- 工作: 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 的自定义绑定,它现在非常适合我!