Der Grund, warum Ihr Click-Handler nie ausgelöst wird, ist, dass er nie auf Ihr Element angewendet wird. Also, wenn Sie dies in Jquery tun:
$('.some-class').on('some-event', someFunction);
Damit der Handler an dieses Ereignis gebunden werden kann, muss jQuery zuerst Ihre $('.some-class')
Selektor. In Ihrem Fall ist höchstwahrscheinlich #btnParse
noch nicht durch Knockout auf die Seite übertragen, wenn Sie das Ereignis binden. Es ist aber auch möglich, dass das ursprüngliche Element gerendert, zerstört und dann ein anderes Element gerendert wird. In diesem zweiten Szenario würde der Ereignishandler nicht auf der Schaltfläche verbleiben. Eine Alternative (die ich nicht empfehle) besteht darin, den Handler weiter oben im DOM zu binden, z. B. an die document
Ebene, und filtern Sie nur die Ereignisse, die etwas mit einer id #btnParse
:
$(document).on('click', '#btnParse', function () { console.log('hi'); });
Der Grund, warum ich das nicht empfehle, ist, dass es eine schlechte K.O.-Praxis ist, Sie sollten die click
verbindlich, wie in anderen Beiträgen vorgeschlagen. Außerdem verwenden Sie ein id-Attribut, und das ist wirklich keine gute Idee im Allgemeinen für dynamische Inhalte mit Vorlagen - verwenden Sie einfach Klassen, es sei denn, Sie brauchen unbedingt eine id für ein eindeutiges statisches Element.
Was die korrekte Verwendung der Knockout-Klickbindung angeht, so müssen Sie zunächst verstehen, wie Knockout das Scoping durchführt. Wenn Sie zum Beispiel einen Klick innerhalb einer Schleife binden und den Handler von Ihrem Haupt-View-Modell wollen, müssen Sie den übergeordneten Bereich referenzieren, weil die Schleife Ihren Kontext ändert:
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction"></a>
<!-- /ko -->
Wenn Sie außerdem den Javascript-Kontext ändern müssen, mit dem Ihr Handler ausgeführt wird (die this
), dann müssen Sie den Click-Handler wie folgt binden:
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction.bind($parent)"></a>
<!-- /ko -->
Spielen Sie ein wenig damit und stellen Sie eine neue Frage, wenn Sie immer noch verwirrt sind. Viel Glück!