【发布时间】:2016-11-03 16:15:50
【问题描述】:
我的淘汰赛网络中的计算变量有问题。这是我的代码:
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);
};
}
所以,我只收到一个带有座位的数组,我想为数组中的每个对象添加一个字段,以便在 UI 中显示为“已选择”。
我从 ajax 读取会话和席位的原始信息,当我更新它们时,我的 UI 没有任何变化。
为什么会这样?然后,我需要做什么来更新我的 UI?
谢谢!
编辑
<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 不是 ViewModel...应该是吗?
【问题讨论】:
-
selected中的seatsComplete属性可能必须是可观察的。这意味着您必须使用seatsComplete[i].selected(seatsComplete[i].id == self.selectedSeatId())等设置它。 -
对不起,这不起作用...
-
您能展示您的视图 (HTML) 和座位的视图模型吗?
-
我已经编辑了我的问题。
标签: knockout.js knockout-3.0 computed-observable