2012-06-28 3 views
23

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

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

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

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

ответ

35

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

// 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/

+6

, что происходит когда у вас есть несколько свойств, которые необходимо установить? как здесь, у нас есть только место. Заработал, добавив несколько свойств. Я хотел бы использовать плагин ko.mapper, есть ли способ сделать это? – Tushar

+7

Вы можете использовать функцию замены нокаута для обновления всего элемента: 'this.seats.replace (seat, newSeat);' – jesal

+0

Мне нужна дополнительная информация о том, как запрос создается на сервере (я думаю, у элемента есть некоторый идентификатор) , и какие данные возвращает сервис (отдых?) – Jorgelig

Смежные вопросы