如何使用微调器输入强制 valueUpdate (knockoutJS)
How to force valueUpdate (knockoutJS) with spinner input
我有一个带有以下内容的微调器 HTML:
<input id="infoX" data-bind="spinner: infoXpos, spinnerOptions: { min: -50, max: 50 }, valueUpdate: ['propertychange','input']" />
但是,在我改变焦点之前,valueUpdate 似乎不起作用。 有没有其他方法可以强制更新,以便每次点击微调按钮时,"infoXpos" 都会更新?
下面是我的绑定处理程序:
ko.bindingHandlers.spinner = {
init: function (element, valueAccessor, allBindingsAccessor) {
//initialize datepicker with some optional options
var options = allBindingsAccessor().spinnerOptions || {};
//handle the field changing
ko.utils.registerEventHandler(element, "spinchange", function () {
var observable = valueAccessor();
observable($(element).spinner("value"));
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).spinner("destroy");
});
$(element).spinner(options);
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
current = $(element).spinner("value");
if (value !== current) {
$(element).spinner("value", value);
}
}
};
似乎只是发布到 SO 对我的问题解决有很大的影响。 ;)
解决方法很简单。我更改了事件处理程序以响应 "spinstop" 而不是 "spin change"。
ko.utils.registerEventHandler(element, "spinstop", function () {
var observable = valueAccessor();
observable($(element).spinner("value"));
});
成功了。
Fiddle 这里:http://jsfiddle.net/AsleG/m6ztnqxc/