3

是否可以使用值绑定将 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 可观察对象中。

4

3 回答 3

3

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

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

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

于 2012-04-06T14:43:16.280 回答
2

仅供其他读者接受接受的答案,KO v3 添加了checkedValue绑定,现在这使得这成为可能。

于 2014-08-24T10:51:33.913 回答
0

我也需要这个。我的解决方案类似于 John Earles,除了我使用 acomputed而不是subscribe

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

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

于 2013-03-11T16:36:48.880 回答