如何使用微调器输入强制valueUpdate(knockoutJS)

时间:2015-02-18 11:00:18

标签: javascript jquery jquery-ui knockout.js spinner

我有一个带有以下HTML的微调器:

<input id="infoX"  data-bind="spinner: infoXpos, spinnerOptions: { min: -50, max: 50 }, valueUpdate: ['propertychange','input']"  />

然而,在更改焦点之前,valueUpdate似乎不起作用。 有没有其他方法强制更新,以便每次点击微调按钮,“infoXpos”更新?

以下是我的bindingHandler:

    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);
        }
    }
};

1 个答案:

答案 0 :(得分:2)

似乎只是发布到SO对我的问题解决有很大的影响。 ;)

解决方案非常简单。我改变了事件处理程序以响应“spinstop”而不是“spin spin”。

ko.utils.registerEventHandler(element, "spinstop", function () {
        var observable = valueAccessor();
        observable($(element).spinner("value"));
    });

这就成功了。

在这里小提琴:http://jsfiddle.net/AsleG/m6ztnqxc/