请帮忙。我有一个计算的observable itemsOnCurrentPage绑定到tbody。使用搜索功能更新计算的observable。但是我的ui仍然显示相同的数据。它不显示itemsOnCurrentPage的更新内容。
var listofcases = ko.observableArray();
var itemsOnCurrentPage = ko.computed(function () {
var startIndex = pageSize * currentPageIndex();
console.log(listofcases.slice(startIndex, startIndex + pageSize));
return listofcases.slice(startIndex, startIndex + pageSize);
}, this);
function SearchCases(username, role, st, ed, ss) {
$.getJSON('/breeze/Workflow/ListOfCases?UserId=' + username +
'&Role=' + role +
'&RouteId=Annotate&_st=' + st +
'&_ed=' + ed +
'&_ss=' + ss,
function (cases) {
if (cases.length != 0) {
$.each(cases, function (index, _case) {
listofcases.push(new CaseDataViewModel(_case));
});
itemsOnCurrentPage(listofcases());
}
else {
console.log("dddd");
listofcases.push(new CaseDataViewModel(_case));
}
});
}
答案 0 :(得分:2)
您不应该从SearchCases
函数调用computed。当listofcases
更新时,Knockout会自动重新计算计算结果。
删除以下行:
itemsOnCurrentPage(listofcases());
答案 1 :(得分:0)
正如Artem所说,你不应该在任何地方设置计算。删除这一行:
itemsOnCurrentPage(listofcases());
您也不需要修改计算,因此不需要将此传递给计算,我怀疑这可能导致问题。尝试用这个替换你的计算机:
var itemsOnCurrentPage = ko.computed(function () {
var startIndex = pageSize * currentPageIndex();
console.log(listofcases().slice(startIndex, startIndex + pageSize));
return listofcases().slice(startIndex, startIndex + pageSize);
});