var viewModel = {
enable: ko.observable(true),
selected: ko.observableArray(['Y'])
};
ko.applyBindings(viewModel);
<p> Current Radiobutton Value = <span data-bind='text: selected' ></span></p>
<input type='radio' name='onlyOne' data-bind='checked: selected, enable: enable' value='Y' /> Yes
<input type='radio' name='onlyOne' data-bind='checked: selected, enable: enable' value='N' /> No
<input type='radio' name='onlyOne' data-bind='checked: selected, enable: enable' value='M' /> Maybe
selected: ko.observable('Y')
<div data-bind="foreach:list">
<label>
<input type="radio" data-bind="
checkedValue: [$data],
radioChecked: $parent.checkedVal,
checkedComparer: $parent.itemCompare
"/>
<span data-bind="text: $data"></span>
</label>
<br />
</div>
<span data-bind="text: JSON.stringify(checkedVal())"></span>
ko.bindingHandlers.radioChecked = {
init: function (element, valueAccessor, allBindings)
{
ko.utils.registerEventHandler(element,
"click",
function ()
{
if (element.checked)
{
var observable = valueAccessor(),
checkedValue = allBindings.get('checkedValue');
observable(checkedValue);
}
});
},
update: function (element, valueAccessor, allBindings)
{
var modelValue = valueAccessor()(),
checkedValue = allBindings.get('checkedValue'),
comparer = allBindings.get('checkedComparer');
element.checked = comparer(modelValue, checkedValue);
}
};
function viewModel ()
{
this.list = [
"One",
"Three",
"Five"
];
this.checkedVal = ko.observableArray(["Three"]);
this.itemCompare = function(a, b)
{
return JSON.stringify(a) == JSON.stringify(b);
}
}
ko.applyBindings(new viewModel())