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

したがって、最終的には、車またはトラックの 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

I needed this too. My solution was similar to John Earles except I used a computed instead of 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 に答える