3

Вопрос по javascript – Может ли наблюдаемый нокаут быть привязанным к значению переключателя?

Можно ли привязать наблюдаемое свойство Knockout к переключателю, используя привязку значений?

Вот что я пытаюсь сделать, но в итоге получим строку «[Объектный объект]» вместо фактического экземпляра моего наблюдаемого свойства:

<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 были в выбранной наблюдаемой группе автомобилей.

  • 0

    Мне это тоже нужно. Мое решение было похоже на Джона Эрлса

    за исключением того, что я использовал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/

  • 2

    К вашему сведению

    другие читатели, пришедшие к принятому ответу, добавили КО v3CheckedValue привязка, которая теперь делает это возможным.

  • 3

    Как задокументировано

    Вот только узлы Select имеют возможность привязывать произвольный объект JavaScript к значению. Для других входных данных требуется строковое значение, поэтому ваше значение возвращает & quot; [объект объекта] & quot ;.

    Вы все еще можете делать, что хотите, но вам придется вручную сопоставить ключ и найти соответствующий объект самостоятельно. Вот скрипка, которая демонстрирует:

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