У меня есть bindingHandler так:слайдов с jqSlider и нокаута JS
ko.bindingHandlers.percentageSlider = {
init: function (element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().percentageSliderOptions || {};
$(element).slider(options);
ko.utils.registerEventHandler(element, "slidechange", function() {
var observable = valueAccessor();
observable($(element).slider("value"));
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).slider("destroy");
});
ko.utils.registerEventHandler(element, "slide", function() {
var observable = valueAccessor();
observable($(element).slider("value"));
});
},
update: function (element, valueAccessor) {
var value = lo.unwrap(valueAccessor());
$(element).slider("value", value);
}
};
и шаблон связывания ползунок следующим образом:
<tr>
<td class="caption-cell">@Translate("EditProbability")</td>
<td width="75%">
<div style="float:left;" data-bind="percentageSlider: probability, percentageSliderOptions: {min: 0, max: 100, range: 'min', step: 10}"></div>
<div style="float:left;margin:0 0 0 10px" data-bind="dynamicText: function(){ return probability() + '%'; }"></div>
</td>
</tr>
Обработчик dynamicText выглядит следующим образом:
ko.bindingHandlers.dynamicText = {
'update': function (element, valueAccessor) {
var value = lo.unwrap(valueAccessor());
if (typeof value === 'function') {
value = value(element);
}
if ((value === null) || (value === undefined)) {
value = "";
}
if (typeof element.innerText == "string") { element.innerText = value; }
else { element.textContent = value; }
}
};
Теперь моя проблема в том, что ползунок имеет неправильное поведение, иногда я не могу добраться до 100%, а иногда значение является переворотом в десятки от того, что должно быть. Если я просто нажимаю один раз на слайдер, он всегда переходит в правильное положение. Я хочу, чтобы процент обновлялся при сдвиге ползунка, и я также хочу, чтобы ползунок правильно обновлялся нокаутом (с событием обновления). Какой подход мне следует принять здесь? Спасибо за прочтение.
Вы можете подключить его на JsFiddle или что-то, чтобы мы могли посмотреть? – farina