绑定在ui中计算的ko

时间:2013-10-21 14:47:18

标签: knockout.js

请帮忙。我有一个计算的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));
                      }
                  });
    }

2 个答案:

答案 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);
    });