0

完全卡在了这一点上。仔细阅读,但令人难以置信的是找不到其他任何可能超过两个单选按钮的人,这些单选按钮需要它们的值作为布尔值。

给定一个看起来像这样的视图:- 在此处输入图像描述

相应的淘汰视图模型:-

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。其他必须设置为假。我已经尝试对下面的 html 进行各种调整,但我没有得到任何结果。有些帖子说真/假被设置为字符串,例如“真”或“假”。我已经尝试过淘汰可观察扩展器、回调,但正如我所说,到目前为止没有任何效果。有时我得到一个“on”对于 firebug 中的“IsMainDriver”无效。到目前为止,我所做的最大努力是使用自定义绑定,其中唯一的问题是“IsMainDriver”可观察对象一旦设置为 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>
4

1 回答 1

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

在视图中使用了“已检查”绑定。

<input name="IsMainDriver" type="radio" data-bind="checked: IsMainDriverFormatted" />
于 2013-07-24T20:04:43.597 回答