I have a problem with a computed variable in my knockout web. Here's my code:
function ViewModel() {
var self = this;
self.seatsRaw = ko.observableArray([]);
self.selectedSeatId = ko.observable();
self.session = ko.observable();
self.seats = ko.computed(function(){
var seatsComplete= self.seatsRaw().slice(0);
for (var i = 0; i < seatsComplete.length; i++) {
if (self.selectedSeatId()) {
seatsComplete[i].selected = seatsComplete[i].id == self.selectedSeatId();
} else if (self.session () && Number(self.session ().seat) > 0) {
seatsComplete[i].selected = seatsComplete[i].id == self.sesion().seat;
} else {
seatsComplete[i].selected = false;
}
}
return seatsComplete;
});
self.selectSeat = function(data,event) {
self.selectedSeatId($(this).id);
};
}
So, I just receive an array with seats and I want to add a field to each object in array to show in the UI as "selected".
I read from ajax the info for session and seats raw, and when I update them I don't see any change in my UI.
Why is happening? And then, what I need to do to update my UI?
Thanks!
EDIT
<ul class="seats" data-bind="foreach: seats">
<li data-bind="css: {selected: selected, 'non-selected': !selected}, click: $root.selectSeat">
<a href="#" data-bind="attr: {id: id}">
<img data-bind="attr: {src: baseUrl + 'img/seats/' + image}" />
<p data-bind="text: name"></p>
</a>
</li>
</ul>
Seat is not a ViewModel... should it be?