将kickout.js绑定到布尔型JQuery Mobile翻转开关切换 [英] Bind knockout.js to a boolean JQuery Mobile flip switch toggle

查看:102
本文介绍了将kickout.js绑定到布尔型JQuery Mobile翻转开关切换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个绑定到JQM触发器开关的布尔值,但是我看不到它对基础可观察对象的更改做出反应.

i have a boolean value bound to a JQM flip switch toggle, but i'm not able to see it reacting to changes to the underlying observable.

这是我的对错:

ko.booleanObservable = function (initialValue) {
    var _actual = ko.observable(initialValue);
    var result = ko.computed({
        read: function () {
            var readValue = _actual().toString();
            return readValue;
        },
        write: function (newValue) {
            var parsedValue = (newValue === "true");
            _actual(parsedValue);
        }
    });
    return result;
};

结合使用JQM拨动开关拨动和淘汰按钮的最佳方法是哪一种?

Which is the best way to combine JQM flip switch toggle and Knockout?

jsFiddle此处: http://jsfiddle.net/nmq7z/

jsFiddle here: http://jsfiddle.net/nmq7z/

先谢谢大家

更新:具有更好的测试用例: http://jsfiddle.net/FU7Nq/

UPDATED: with a better test case: http://jsfiddle.net/FU7Nq/

推荐答案

我明白了,

感谢kadumel,它指出我的第一段代码确实很糟糕. 然后,我从计算的可观察值切换到自定义绑定,这对我来说似乎是一个很好的解决方案:

Thanks to kadumel which point out that my first piece of code was really bad. Then, i switched from a computed observable to a custom binding, which seems to me a good solution:

ko.bindingHandlers.jqmFlip = {
    init: function (element, valueAccessor) {
        var result = ko.bindingHandlers.value.init.apply(this, arguments);
        try {
            $(element).slider("refresh");
        } catch (x) {}
        return result;
    },
    update: function (element, valueAccessor) {
        ko.bindingHandlers.value.update.apply(this, arguments);
        var value = valueAccessor();
        var valueUnwrapped = ko.utils.unwrapObservable(value);
        try {
            $(element).slider("refresh");
        } catch (x) {}
    }
};



<select name="select-ismale" id="select-ismale" data-bind="jqmFlip: isMale.formattedValue" data-role="slider">
    <option value="false">No</option>
    <option value="true">Yes</option>
</select>

这是正常工作的提琴: http://jsfiddle.net/FU7Nq/1/

希望这可以帮助其他人处理JQM翻转开关切换.

Hope this can help some other People to deal with the JQM Flip Switch Toggle.

通过扩展程序可实现具有"true"布尔值可观察值的绑定:这是isMale.formattedValue的含义.

The binding with a "true" boolean observable is realized through an extender: this is the meaning of isMale.formattedValue.

蒂姆(Tim)的博客中描述了这种非常干净且功能强大的解决方案(谢谢蒂姆!).

This very clean and powerful solution is described in Tim's blog (thank You, Tim!).

这篇关于将kickout.js绑定到布尔型JQuery Mobile翻转开关切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆