Я изучаю использование нокаута, и теперь я создаю слайдер, используя jquery ui slider
.используя нокаут для создания слайдера
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);
}
};
В моем слайдере, есть 3 состояния: 0, 50 и 100, которые должны быть установлены в соответствии со значением А в моем ViewModel
var ViewModel = function() {
var self = this;
self.A = ko.observable(null);
var x = Math.random();
if(x<0.33){
self.A(0);
}else if (x>0.33 && x<0.66){
self.A(50);
}else {
self.A(100);
}
}
И в обратном направлении, когда мы меняем ползунок в View
, параметр A в ViewModel
также должен быть изменен.
Это мой Вид:
<div style="margin: 10px" data-bind="slider: A, sliderOptions: {min: 0, max: 100, step: 50}"></div>
Я уже успешно создать слайдер с этими трмися состояниями в соответствии со значением А, но когда я изменить ползунок, новое значение A в viewModel
является не обновляется. У кого-нибудь есть идея?
Это мой jsfiddle.
ок я теперь изменить – Sonn
[Если отлажены ваш jsfiddle отлично работает для меня] (http://jsfiddle.net/18jzuvcd/) (хотя я чувствовал, что пример был понятнее с 'шагом : 10' и без 'afterkeydown'). Поэтому мне непонятно, что именно вы спрашиваете. – Jeroen
Hi Jeroen, извините, из-за чего вы смущены. Я уже обновился, чтобы сделать мой вопрос более ясным. На вопрос: «Почему вы передаете слайдерОпции через allBindingsAccessor, а не ползунок»? , Я понятия не имею, потому что я нашел код слайдера в Интернете. – Sonn