0

我建立了一个页面,其中有单选按钮控制使用 ko 设置的内容。直到现在一切正常,但由于某种奇怪的原因(可能是我团队中某人的更新),控件无法正常工作。为了找到错误,我使用了 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*@

和我的视图模型:

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

如您所见,单选按钮应该获得值“almond”,但事实并非如此。检查我的视图模型(在打字稿中)与我的视图一起使用的方法是在控件中查看正常工作的内容。

目前我们使用的是knockout-2.3.0。知道我在做什么错吗?

4

2 回答 2

0

尝试将淘汰赛库从 2.3.0 更改为 3.0.0。似乎有一个处理单选按钮的错误。试试这个http://jsfiddle.net/qACa6/1/和 jsfiddle 例子

<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);

它不完全是您的代码,但看起来,这个问题是一样的。只需更改淘汰赛库的版本...

于 2014-02-21T19:12:17.353 回答
0

跳出来的第一件事是你没有评估你的“检查”陈述是真还是假,这是让你的收音机被选中所需要的。

尝试data-bind="checked: $root.spamFlavor() == 'almond'"将评估真/假

于 2013-09-08T18:40:31.220 回答