未从viewmodel(knockoutjs)设置的单选按钮

时间:2013-09-08 04:13:56

标签: javascript knockout-2.0 single-page-application

我已经构建了一个页面,其中我有radiobuttons控制使用ko设置的内容。一切都工作正常,直到现在由于一些奇怪的原因(可能是我团队中某人的更新o k.o),控件无效。 为了找到错误,我使用了knockoutjs页面中的相同示例,以便于实现。 布局:

<div >
    <div><input type="radio" name="flavorGroup" value="cherry" data-bind="checked: $root.spamFlavor" /> Cherry</div>
     <div><input type="radio" name="flavorGroup" value="almond" data-bind="checked: $root.spamFlavor" /> Almond</div>
     <div><input type="radio" name="flavorGroup" value="msg" data-bind="checked: $root.spamFlavor" /> Monosodium Glutamate</div>
</div>
<small data-bind="text: $root.spamFlavor"></small> @*this work fine*@

和我的viewmodel:

export var spamFlavor = ko.observable("almond");

正如您所看到的那样,radiobutton应该得到“杏仁”的值,但事实并非如此。检查我的viewmodel(在typescript中)的方法是使用我的视图查看控件什么工作正常。

目前我们正在使用knockout-2.3.0。知道我做错了吗?

2 个答案:

答案 0 :(得分:0)

向我跳出的第一件事是你没有评估你的“已检查”的陈述是真还是假,这是选择你的无线电所需的。

尝试data-bind="checked: $root.spamFlavor() == 'almond'",它将评估true / false

答案 1 :(得分:0)

尝试将淘汰库从2.3.0更改为3.0.0。似乎存在处理辐射按钮的错误。使用jsfiddle示例

尝试此http://jsfiddle.net/qACa6/1/
<div data-bind="foreach: items">
    <input type="radio" name="group"
           data-bind="checkedValue: $data, checked: $root.selectedItem" />
    <span data-bind="text: foo"></span>
</div>
<div data-bind="text: ko.toJSON(selectedItem)" />

使用javascript部分

var ViewModel = function () {
  this.items = ko.observableArray();
  this.selectedItem = ko.observable();   

  var object1 = {foo: 1, anotherValue: ko.observable(1)}
  var object2 = {foo: 2, anotherValue: ko.observable(2)}

  this.items.push(object1);
  this.items.push(object2);

  this.selectedItem(object2);

};

var vm = new ViewModel();
ko.applyBindings(vm);

它不完全是你的代码,但似乎问题是一样的。只需更改淘汰库的版本......