The context of “this” in Meteor template event handlers (using Handlebars for templating)

后端 未结 2 529
庸人自扰
庸人自扰 2020-12-02 10:09

A quick question on the context of the event handlers for templates in Meteor (with Handlebars).

  • In the section of Documentation on template instances (http:/
相关标签:
2条回答
  • 2020-12-02 10:29

    The first parameter in the function is the event. So you could use the target of the event to grab your element.

    Template.scores.events({
      'click .click-me': function (event, template) {
        console.log(event.target);
        $(event.target).text("O but I did!");
      }
    });
    
    0 讨论(0)
  • 2020-12-02 10:35

    This video explains the concepts:

    http://www.eventedmind.com/posts/meteor-spark-data-annotation-and-data-contexts.

    The direct answer to your question:

    The thisArg inside an event handler should point to a data context. But sometimes the data context is undefined. When you use the Function.prototype.call(thisArg, ...) in JavaScript, if the thisArg is undefined (e.g. a dataContext is undefined) the browser will set this equal to window. So, the docs aren't wrong per se but the event handling code isn't guarding against the possibility of a data context being undefined. I'm guessing that will be fixed in short order.

    So, what produces a data context for a template? Normally your root template won't even have a data context. In other words, the Template function is called without an object. But if you use the {{#with block helper or the {{#each iterator, a data context will be created for each item in the list, or in the case of the with helper, the object.

    Example:

    var context = {};
    
    <template name="withHelper">
      {{#with context}}
        // data context is the context object
      {{/with}}
    </template>
    
    var list = [ {name: "one"}, {name: "two"} ];
    
    <template name="list">
      {{#each list}}
        {{ > listItem }} // data context set to the list item object
      {{/each}}
    </template>
    
    0 讨论(0)
提交回复
热议问题