jQuery 旋转器和 knockout

标签 jquery jquery-ui data-binding knockout.js spinner

如何将 jQuery UI 旋转小部件与 Knockout 结合起来?这个answer不再有效,因为没有 spinchange 事件。这是我的 HTML:

<input id='spinner' data-bind='value:theValue' />
<span data-bind='text:theValue'></span>

还有我的 JS:

$(function() {
    $('#spinner').spinner();

    var viewModel = {
        theValue: ko.observable(3)
    };

    ko.applyBindings(viewModel);
});

你可以在 jsFiddle 中尝试这个。如您所见,使用微调器按钮不会更改 span 内的文本。使用键盘输入数字,然后将焦点放在页面上的其他位置将更改文本(因此绑定(bind)有效)。

因为我使用的是 ASP.NET,并且将此微调器小部件封装在 WebControl 中,所以它可能与此有关。我不能采用与上述答案相同的方法,因为我们并不是在每个页面上都使用 Knockout。

但是如果我能让 jsFiddle 工作,那可能会进一步帮助我,甚至只是解决方案。

最佳答案

咳咳,不用再看了。显然,答案是正确的。我相信问题出在 ko.utils.registerEventHandler 上。当我将代码更改为:

时它就起作用了
ko.bindingHandlers.spinnerValue = {
    init: function (element, valueAccessor) {
        //handle the field changing
        $(element).on('spinstop', function () {
            var observable = valueAccessor();
            observable($(element).spinner("value"));
        });
    },

    update: function (element, valueAccessor) {
        var value = ko.utils.unwrapObservable(valueAccessor());

        current = $(element).spinner("value");
        if (value !== current) {
            $(element).spinner("value", value);
        }
    }
};

所以我使用 jQuery 和 on 函数。 spinstop 事件确实存在(spinchange 也是如此)。我一直在查看代码并只是搜索字符串。我猜 jQuery 代码的做法有点不同。

无论如何,这个自定义处理程序可以工作,即使使用我们的 ASP.NET WebControl。对于旧版本的微调器(我们之前使用的是 1.20),正常的 KO 数据绑定(bind)可以工作。

关于jQuery 旋转器和 knockout ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18615944/

相关文章:

javascript - 对动态 HTML 表格应用多重过滤

javascript - 如何在 jQuery 小部件中使用动态属性值

java - 嵌套对象的 Spring JSON 数据绑定(bind)不起作用

javascript - 在动画期间盲目隐藏div

c# - 在 XAML 中使用 ["string"] 语法进行数据绑定(bind)

c# - 在绑定(bind)到 ICommand 的 Button 处控制 ExceptionValidationRule

javascript - 洗牌函数随机化字母

jquery - html5 卡片配对游戏 - 无法将图像与 Sprite 分开

javascript - 基于数组的高亮行

jquery - 如何通过小部件代码使用网站的 jQuery