【发布时间】:2015-12-04 22:30:23
【问题描述】:
我对淘汰赛比较陌生,并且遇到了一些可观察的问题。这是我正在使用的一些淘汰赛的配对版本:
var model;
function viewModel(data) {
var self = this;
self.favesData = ko.observableArray(data.User.Favorites);
self.splitRows = ko.computed(function () {
var i = 0;
var faveRows = [];
var size = 2;
while (i < self.favesData().length) {
faveRows.push(self.favesData().slice(i, i += size));
}
return faveRows;
});
self.refresh = (function (data) {
self.favesData(data.User.Favorites);
});
}
function onComplete(result) {
if (!model) {
model = new viewModel(result);
ko.applyBindings(new viewModel(result));
} else {
model.refresh(result);
}
}
<table class="table-main link" data-bind="foreach: splitRows">
<tr data-bind="foreach: $data">
<td>
<div class="link">
<a href="#" data-bind="text: $data.Name">
</a>
</div>
</td>
</tr>
</table>
我使用 ajax GET,它调用 onComplete。数据很好,在初始加载时一切都很好。然后我用新的输入调用相同的 ajax 函数,它开始正常工作 - 返回的数据不同,刷新更新 favesData,splitRows 重新计算,但 UI 显示永远不会改变。 splitRows 在重新计算时不应该更新绑定吗? 我很困惑将新数据传递给 favesData 如何更新观察它的计算 observable,但计算 observable 不会更新 UI。
【问题讨论】:
标签: knockout.js