有關流星中的模板的事件處理程序的上下文(帶Handlebars)的快速問題。流星模板事件處理程序中的「this」的上下文(使用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}});
});
這裏了‘‘點擊.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>
...然後添加一個事件處理程序。點擊,我的分數模板:
Template.scores.events({
'click .click-me': function() {
console.log(this);
}
});
現在,如果你點擊跨度,你會得到什麼記錄? Window對象!我期望得到什麼?模板對象!或者可能是數據上下文,但它不是。但是,在回調中(例如Template.scores.rendered = function(){...}),「this」的上下文始終是模板實例。
我想我真正的問題是:這事做的之間
- 一個bug在車把,流星或地方?
- 模板上的文檔略有不完整?
- 我完全誤解了文檔,或者沒有理解關於流星或Handlebars的基本內容 ?
謝謝!
這是一個正確的問題。我總是使用'function(event,template)',然後通過'template.data'訪問事件中的數據。 – Twark 2013-02-28 16:24:44
希望我可以upvote兩次 – Ruby 2015-06-29 18:21:56
@ТаняТ。你可以把問題標記爲最喜歡的,就像我做的那樣;-) – think01 2015-09-03 09:38:02