Knockout observable可以是绑定到单选按钮值的数据吗

Can a Knockout observable be data bound to the value of a radio button?

本文关键字:单选按钮 数据 绑定 observable Knockout      更新时间:2023-09-26

是否可以使用值绑定将Knockout可观察属性绑定到单选按钮?

这是我试图做的,但值最终是字符串"[Object-Object]",而不是我的可观察属性的实际实例:

<input type="radio" name="vehicleGroup" data-bind="checked: vehicleGroupViewModel().selectedGroupOption , value:vehicleGroupViewModel().car" />
<input type="radio" name="vehicleGroup" data-bind="checked: vehicleGroupViewModel().selectedGroupOption , value:vehicleGroupViewModel().truck" />

以下是我使用的视图模型:

var VehicleGroupViewModel = function(){
    var self = this;
    this.selectedVehicleGroup = ko.observable();
    this.selectedGroupOption = ko.observable();
    this.selectedGroupOption.subscribe(function (newVal) {
        self.selectedVehicleGroup(newVal);
    }
    this.selectedGroup = ko.observable();
    this.car = ko.observable(new VehicleViewModel());
    this.truck = ko.observable(new VehicleViewModel());
}
var VehicleViewModel = function(){
    this.name = ko.observable();
}

因此,最后我希望Car或Truck VehicleViewModel位于可观察的selectedVehicleGroup中。

如本文所述只有Select节点能够将任意JavaScript对象绑定到值。其他输入需要一个字符串值,这就是您的值返回"[Object-Object]"的原因。

你仍然可以做你想做的事,但你必须手动映射一个键并自己找到合适的对象。这是一把小提琴,展示:

http://jsfiddle.net/jearles/JcPXy/

仅供其他读者参考,KO v3添加了checkedValue绑定,这使得这成为可能。

我也需要这个。我的解决方案与John Earles类似,只是我使用了computed而不是subscribe:

self.selectedVehicleGroup = ko.computed(function(){
    return ko.utils.arrayFirst(self.availableGroups(), function (group) { return group.name() == self.selectedGroupOption(); });
});

http://jsfiddle.net/JcPXy/91/