1

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

ラジオボタンの1つがチェックされることを期待していました(値が「ss」のボタンですが、そうではありません。誰か知っていますか、なぜですか?

乾杯

4

2 に答える 2

5

次のコマンドを使用すると機能します $(function () { ko.applyBindings(aResult); }); 。jquerymobileをオフにします。

私はあなたのjsfiddleで試しました。

jquery mobileが必要な場合は、次のリンクが機能します:http: //www.codesizzle.com/jquery-mobile-radio-with-knockout-js/

于 2013-03-26T13:09:55.193 に答える
2

OK、何をする必要がありますか?

別のイベントハンドラーを追加し、それをバインディングに追加します。

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/

于 2013-03-26T13:29:25.610 に答える