Meteor (ハンドルバー付き) のテンプレートのイベント ハンドラーのコンテキストに関する簡単な質問です。
- テンプレート インスタンスに関するドキュメントのセクション ( http://docs.meteor.com/#template_inst ) では、「テンプレート インスタンス オブジェクトは、作成、レンダリング、および破棄されたテンプレート コールバック内の this の値として、およびイベントハンドラへの引数"
- テンプレート セクション ( http://docs.meteor.com/#templates ) には、「最後に、テンプレート関数でイベント宣言を使用して、イベント ハンドラーのテーブルを設定できます。形式は Event Maps に記載されています。イベント ハンドラーへの this 引数は、イベントをトリガーした要素のデータ コンテキストになります。 "
まあ、これは部分的にしか当てはまりません。ドキュメントの例を使用しましょう。
<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}});
});
ここで、「click .givePoints」イベント ハンドラーの「this」コンテキストは、実際には 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);
}
});
では、スパンをクリックすると、何がログに記録されるでしょうか? ウィンドウオブジェクト!私は何を得ることを期待していましたか?テンプレートオブジェクト!または、データ コンテキストかもしれませんが、どちらでもありません。ただし、コールバック (例: Template.scores.rendered = function(){ ... }) 内では、"this" のコンテキストは常にテンプレート インスタンスです。
私の本当の質問は次のようになると思います:これは何か関係がありますか
- ハンドルバー、Meteor、またはその間のどこかにバグがありますか?
- テンプレートに関するわずかに不完全なドキュメント?
- ドキュメントを完全に誤解していたり、Meteor やハンドルバーに関する基本的なことを理解していませんか?
ありがとう!