Knockout在启动后未验证可见检查

时间:2014-04-07 08:44:40

标签: javascript html knockout.js

我有一个index.html页面,可以保存我的整个前端webapp。它导入具有各种功能的javascript文件,并根据函数调用显示index.html页面中的数据。

我有一个数据库调用,然后是一些分页 - 分页是我的问题。我在index.html文件中有这两个按钮:

  <li style="margin-left: 650px">
      <button type="button" class="btn btn-default" data-bind="click: myApp.vm.previous, visible: previousEnabled()">Previous
     </button>
     <button type="button" class="btn btn-default" data-bind="click: myApp.vm.next, visible: nextEnabled()">Next
     </button>
  </li>

这是javascript文件中的previousEnabled和nextEnabled函数:

  previousEnabled = ko.computed(function(){
    console.log("previousEnabled check --------------------");
    return _currentPage > 1;
  });

  nextEnabled = ko.computed(function(){
    console.log("nextEnabled check --------------------");
    return _currentPage < totalPage;
  });

当我登录前端时,我只看到previousEnabled check和nextEnabled检查日志。当我从数据库中获取记录并希望翻阅它们时,我再也看不到了。似乎我的可见验证只发生一次,然后再也不会发生。这是为什么?

2 个答案:

答案 0 :(得分:1)

假设_currentPage和totalPage变量都是可观察的,那么你不需要调用可见绑定中的函数,因为它们是计算的可观察对象;淘汰赛将会知道该怎么做。尝试从绑定中删除括号,例如使用data-bind="click: myApp.vm.previous, visible: previousEnabled"作为绑定。

目前,您没有将可观察对象传递给可见绑定,而是调用该函数的输出(这是不可观察的并且不知道何时更新)。看看knockout documentation for computed observables

这也是一个奇怪的点击绑定。通常我希望看到像data-bind="click: previous"这样的东西。如果有疑问,请查看文档(我当然这样做)。

希望这有帮助。

答案 1 :(得分:0)

似乎你的使用ajax&amp;回发后js无效。

回发后

document.ready不会运行。尝试将代码放在function pageLoad()中,如:

function pageLoad()
{
 //....
 previousEnabled = ko.computed(function(){
    console.log("previousEnabled check --------------------");
    return _currentPage > 1;
  });

  nextEnabled = ko.computed(function(){
    console.log("nextEnabled check --------------------");
    return _currentPage < totalPage;
  });
  //....
}

详情请参阅:jQuery document.ready vs pageLoad