我正在使用Knockout模型,并且希望使用jQuery UI范围滑块更新此模型中的值。请看下面的例子:Knockout模型+ jQuery UI范围滑块
型号:现在
var ViewModel = function() {
var self = this;
self.MinTerm = ko.observable();
self.MaxTerm = ko.observable();
}
ko.applyBindings(new ViewModel());
,一个jQuery UI范围滑块应更新这两个值。这(非常丑陋)解决方案走近,在我的视图模型中的值被更新,但不知何故,这并没有反映在绑定到这些值的控制,如:
HTML
<div id="sliderTerms"></div>
<span data-bind="text: MinTerm"></span>
<span data-bind="text: MaxTerm"></span>
脚本:
$("#sliderTerms").slider({
range: true,
min: 6,
max: 120,
values: [6, 120],
step: 1,
slide: function (event, ui) {
ViewModel.MinTerm = ui.values[0];
ViewModel.MaxTerm = ui.values[1];
}
});
现在,这将是非常好的,如果我能绑定到一个自定义bindingHandler像这样,这对于一个滑块绑定到我的KO模型中的奇异值的伟大工程:
ko.bindingHandlers.slider = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().sliderOptions || {};
$(element).slider(options);
ko.utils.registerEventHandler(element, "slidechange", function (event, ui) {
var observable = valueAccessor();
observable(ui.value);
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).slider("destroy");
});
ko.utils.registerEventHandler(element, "slide", function (event, ui) {
var observable = valueAccessor();
observable(ui.value);
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
if (isNaN(value)) value = 0;
$(element).slider("value", value);
}
};
这是我卡住的地方。是否有可能分配valueAccessors的阵列,例如,这样我就可以这样执行的东西:
<div id="sliderTerms" data-bind="rangeSlider: [MinTerm, MaxTerm], sliderOptions: {min: 6, max: 120, range: true, step: 1}"></div>
谢谢!
我更新了我的另一个SO问题http://stackoverflow.com/questions/13682691/knockout-js-jquery-range-slider-2-inputs/13683657#13683657 – Anders
发现了一个错误,如果我改变一个值在绑定到范围滑块的模型中,滑块值不会被更新。将发布修复(如果我找到一个..) –
嗯,“更新”事件没有被解雇。 –