jQuery knockout动态数组radiobuttons,值必须是boolean

时间:2013-07-24 15:08:54

标签: jquery asp.net-mvc-4 knockout.js radio-button

完全坚持这一点。阅读,但令人难以置信的是找不到任何其他可能超过两个radiobuttons需要其值为布尔值的人。

鉴于这样的观点: - enter image description here

相应的淘汰视图模型: -

function driver(name, license, maindriver) {
var self = this;

self.DriverName = ko.observable(name);
self.License = ko.observable(license);
self.IsMainDriver = ko.observable(maindriver);

}

我遇到各种麻烦,让它们发布'IsMainDriver'的实际布尔值。选择其中一个必须设置为true。其他必须设置为false。我已尝试对下面的html进行各种调整,但我没有到达任何地方。有些帖子说的是将真/假设置为字符串,例如“对或错”。我已经尝试了淘汰可观察的扩展器,回调,但正如我所说,到目前为止没有任何工作。有时我得到一个'on'对于firebug中的'IsMainDriver'无效。到目前为止我所做的最好的努力是使用自定义绑定,其中唯一的问题是'IsMainDriver'observable在设置为true后再也没有设置为false,所以基本上尽管只有一个被'检查'在视图中在发布时,多行将'IsMainDriver'设置为true(希望这很有意义)。非常感谢任何帮助。

<td>
  <input name="mainDriverGroup[]" type="radio" data-bind="checked: IsMainDriver, value:IsMainDriver()" class="required" data-val-required="Please choose the main driver." />
  <span class="field-validation-valid" data-valmsg-for="mainDriverGroup[]" data-val-replace="true"></span>
 </td>

1 个答案:

答案 0 :(得分:0)

我已经根据问题创建了基础jsfiddle

由于你只有一个单选按钮,我创建了计算的observable,它将布尔值转换为适当的敲除和返回值。

    this.IsMainDriverFormatted = ko.computed({
    read: function () {
        if (self.IsMainDriver() === true) {
            return 'on';
        }
        else {
            return 'off';
        }
    },
    write: function (value) {
        if (value === 'on') {
            self.IsMainDriver(true);
        }
        else {
            self.IsMainDriver(false);
        }
    },
    owner: this
    });

在视图中使用了'checked'绑定。

<input name="IsMainDriver" type="radio" data-bind="checked: IsMainDriverFormatted" />