Подтвердить что ты не робот

Обновление Knockout.js. Наблюдаемое значение элемента массива

Мне нужно обновить значение элемента наблюдаемого элемента массива. Наблюдаемый массив представляет собой набор объектов класса. Сначала мне нужно найти соответствующий объект по id и обновить некоторые другие значения свойств объекта.

var Seat = function(no, booked) {
    var self = this;
    self.No = ko.observable(no);
    self.Booked = ko.observable(!!booked);

    // Subscribe to the "Booked" property
    self.Booked.subscribe(function() {
        alert( self.No() );
    });
};

var viewModel = {
    seats: ko.observableArray( [
        new Seat(1, false), new Seat(2, true), new Seat(3, true),
        new Seat(4, false), new Seat(5, true), new Seat(6, true),
        new Seat(7, false), new Seat(8, true), new Seat(9, true)
    ] )
};

Может ли кто-нибудь предложить подход к обновлению модели представления? Позвольте сказать, что я хочу обновить забронированное значение до "false" для места № 2.

http://jsfiddle.net/2NMJX/3/

4b9b3361

Ответ 1

Это довольно просто с нокаутом:

// We're looking for the Seat with this No 
var targetNo = 2;

// Search for the seat -> arrayFirst iterates over the array and returns the
// first item that is a match (= callback returns "true")!
var seat = ko.utils.arrayFirst(this.seats(), function(currentSeat) {
    return currentSeat.No() == targetNo; // <-- is this the desired seat?
});

// Seat found?
if (seat) {
    // Update the "Booked" property of this seat!
    seat.Booked(true);
}

http://jsfiddle.net/2NMJX/4/

Ответ 2

viewModel.seats()[self.No()].Booked(true);