为什么这个简单的Knockout.js示例不起作用?

时间:2013-03-26 12:59:04

标签: javascript jquery jquery-mobile knockout.js

我正在玩Knockout.js并创建了这个简单的例子:http://jsfiddle.net/JcTxT/30/

<div id="term_grp" data-role="fieldcontain"><a>Semester:</a>

<fieldset id="term_fields" data-role="controlgroup" data-type="horizontal">
    <input type="radio" name="term" id="ss" value="ss" data-bind="checked: term" />
    <label for="ss">Sommersemester</label>
    <input type="radio" name="term" id="ws" value="ws" data-bind="checked: term" />
    <label for="ws">Wintersemester</label>
</fieldset>
Term is <span data-bind="text: pommes"></span>

var aResult = {
    term: ko.observable("ss"),
    pommes: "TEST"
};

$(document).on('pagebeforeshow', '#mainPage', function () {
    ko.applyBindings(aResult);
});

我希望检查一个单选按钮(值为“ss”的那个)但事实并非如此。有谁知道,为什么?

干杯

2 个答案:

答案 0 :(得分:5)

如果使用,它可以使用: $(function () { ko.applyBindings(aResult); }); 并关闭jquery mobile。

我试过你的jsfiddle。

如果您需要jquery mobile,此链接有效: http://www.codesizzle.com/jquery-mobile-radio-with-knockout-js/

答案 1 :(得分:2)

好的,需要做什么?

添加另一个事件处理程序并将其添加到绑定:

var aResult = {
    term: ko.observable("ws"),
    pommes: "TEST2"
};

ko.bindingHandlers.mobileradio = {
    init: function (element, valueAccessor) {},
    update: function (element, valueAccessor) {
        var value = valueAccessor();
        var valueUnwrapped = ko.utils.unwrapObservable(value);
        if (valueUnwrapped == $(element).val()) {
            $(element).prop("checked", "true").checkboxradio("refresh");
        } else {
            $(element).removeProp("checked").checkboxradio("refresh");
        }
    }
};

$(function () {
    ko.applyBindings(aResult);
});

工作小提琴:http://jsfiddle.net/JcTxT/35/