从单击视图尝试将params传递到knockout函数时遇到问题

时间:2016-05-22 03:13:46

标签: javascript knockout.js

请考虑以下事项:

<!-- ko foreach: new Array($root.totalPages()) -->
  <!-- ko if: $index() + 1 === $root.currentPage() -->
  <li class="active"><a href="#" data-bind="text: $index() + 1"></a></li>
  <!-- /ko -->

  <!-- ko if: $index() + 1 !== $root.currentPage() -->
  <li><a href="#" data-bind="click: $root.navigateToPageNum.bind($index() + 1), text: $index() + 1"></a></li>
  <!-- /ko -->
<!-- /ko -->

重要的部分是click: $root.navigateToPageNum.bind($index() + 1), ...

问题是当我在所述函数中抛出console.log时,我得到了未定义。

    self.navigateToPageNum = function(pageNumber) {
      console.log(pageNumber);
    }

这给了我未定义的点击li链接元素。

totalPages()是7,所以我在页面上有7个li个链接。但点击一个给我未定义。

如何将当前索引传递给函数?

1 个答案:

答案 0 :(得分:1)

first parameter of bindthisArg,因此当前页码将设置为您函数中的this

self.navigateToPageNum = function() {
  console.log(this); // will print the page number
}

如果您想保留签名,则需要将$index() + 1作为第二个参数传递给bind

click: $root.navigateToPageNum.bind($data, $index() + 1)

注意:如果您不关心this中的navigateToPageNum,您也可以传入null作为bind的第一个参数。