Knockout observable可以绑定到单选按钮的值吗?

时间:2012-04-06 13:31:18

标签: javascript data-binding radio-button knockout.js

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

这是我正在尝试做的,但是值最终是字符串“[Object object]”而不是我的observable属性的实际实例:

<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中观察。

3 个答案:

答案 0 :(得分:3)

记录here only Select节点能够将任意JavaScript对象绑定到值。其他输入需要字符串值,这就是您的值返回“[Object object]”的原因。

您仍然可以执行您想要的操作,但您必须手动映射密钥并自行查找相应的对象。这是一个小提琴演示:

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

答案 1 :(得分:2)

对于接受答案的其他读者来说,KO v3添加了checkedValue绑定,现在可以实现这一点。

答案 2 :(得分:0)

我也需要这个。我的解决方案类似于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/

相关问题