2016-05-22 8 views
1

So betrachten die folgenden aus Sicht KO:Erste Probleme mit dem Versuch, params passieren Funktion auf Klick

<!-- 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 --> 

Der wichtige Teil ist der click: $root.navigateToPageNum.bind($index() + 1), ...

Das Problem ist, wenn ich eine console.log in der Funktion werfen Ich werde undefiniert.

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

Das gibt mir nicht definiert, was ich auf dem Element li Link klicken.

Die totalPages() ist 7, also habe ich 7 li Links auf der Seite. aber ein Klick auf einen gibt mir undefiniert.

Wie kann ich den aktuellen Index an die Funktion übergeben?

Antwort

1

Die first parameter of bind ist die thisArg so die aktuelle Seitenzahl wird als this in Ihrer Funktion eingestellt werden:

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

Wenn Sie Ihre Signatur, die Sie in $index() + 1 als zweiten Parameter übergeben müssen halten bind:

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

Hinweis: wenn Sie nicht über die this im navigateToPageNum kümmern können Sie auch in null übergeben als erstes Argument zu bind.

Verwandte Themen