Быстрый вопрос о контексте обработчиков событий для шаблонов в Meteor (с Handlebars).
- В разделе Документация по экземплярам шаблона (http://docs.meteor.com/#template_inst) упоминается, что "Объекты экземпляра шаблона найдены как значение этого в созданном, визуализированном, и разрушенные обратные вызовы шаблонов и как аргумент обработчикам событий"
- В разделе "Шаблоны" (http://docs.meteor.com/#templates) говорится:" Наконец, вы можете использовать объявление событий в функции шаблона для настройки таблицы обработчиков событий. Формат документируется на картах событий. Этот аргумент для обработчика событий будет контекстом данных элемента, вызвавшего событие.
Ну, это только отчасти верно. Позвольте использовать пример из документов:
<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}});
});
Здесь контекст "this" обработчика событий "click.givePoints" действительно является экземпляром шаблона playerScore. Измените html:
<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>
... и добавьте обработчик событий для .click-me в шаблоне результатов:
Template.scores.events({
'click .click-me': function () {
console.log(this);
}
});
Теперь, если вы нажмете пробел, что вы регистрируете? Объект Window! Что я ожидал получить? Объект шаблона! Или, может быть, контекст данных, но это не так. Однако внутри обратных вызовов (например, Template.scores.rendered = function() {...}) контекст "this" всегда является экземпляром шаблона.
Я предполагаю, что мой реальный вопрос: это что-то связано с
- ошибка в Handlebars, Meteor или где-то посередине?
- немного неполная документация по шаблонам?
- меня полностью неверно истолковываю документы или не понимаю что-то фундаментальное о Метеор или Рульберов?
Спасибо!