Der Kontext von "this" in Ereignisbehandlungsroutinen für Meteor-Vorlagen (Verwenden von Handlebars für Vorlagen)

Eine kurze Frage zum Kontext der Ereignishandler für Vorlagen in Meteor (mit Lenkern).

Im Abschnitt Dokumentation zu Vorlageninstanzen (http://docs.meteor.com/#template_inst) es wird erwähnt, dass "Template-Instanzobjekte werden als Wert in den erstellten, gerenderten und zerstörten Template-Callbacks und gefundenals Argument für Event-Handler"Im Abschnitt Vorlagen (http://docs.meteor.com/#templates) es sagt "Schließlich können Sie eine Ereignisdeklaration für eine Vorlagenfunktion verwenden, um eine Tabelle mit Ereignishandlern einzurichten. Das Format ist in Event Maps dokumentiert.Das ist dieses Argument Zum Eventhandler wird derDatenkontext des Elements, das das Ereignis ausgelöst hat."

Nun, das ist nur teilweise wahr. Lassen Sie uns ein Beispiel aus den Dokumenten verwenden:

<template name="scores">
  {{#each player}}
    {{> playerScore}}
  {{/each}}
</template>

<template name="playerScore">
  <div>{{name}}: {{score}}
    <span class="givePoints">Give points</span>
  </div>
</template
Template.playerScore.events({
  'click .givePoints': function () {
    Users.update({_id: this._id}, {$inc: {score: 2}});
  });

Hier ist der "this" -Kontext der Ereignisbehandlungsroutine "click .givePoints" in der Tat die Vorlageninstanz von playerScore. Lassen Sie uns das HTML ändern:

<template name="scores">
  <span class="click-me">Y U NO click me?<span>
  {{#each player}}
    {{> playerScore}}
  {{/each}}
</template>

<template name="playerScore">
  <div>{{name}}: {{score}}
    <span class="givePoints">Give points</span>
  </div>
</template>

... und füge einen Event-Handler für .click-me in die Scores-Vorlage ein:

Template.scores.events({
  'click .click-me': function () {
    console.log(this);
  }
});

Nun, wenn Sie auf die Spanne klicken, was werden Sie protokolliert? Das Fensterobjekt! Was habe ich erwartet zu bekommen? Das Vorlagenobjekt! Oder vielleicht der Datenkontext, aber es ist keiner. In den Rückrufen (z. B. Template.scores.rendered = function () {...}) ist der Kontext von "this" jedoch immer die Vorlageninstanz.

Ich denke, meine eigentliche Frage wäre: Hat das etwas damit zu tun?

ein Bug im Lenker, Meteor oder irgendwo dazwischen?leicht unvollständige dokumentation auf den vorlagen?Ich habe die Dokumente völlig falsch interpretiert oder etwas Grundlegendes über Meteor oder Lenker nicht verstanden.

Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage