我正在研究一个简单的流星闪卡应用程序。每个问题都有一组:text,right_answer,wrong_answers。
将答案连接成一个数组并进行洗牌,然后模板提出一个问题和可能的答案。当用户单击答案时,如何从事件中获取JS中的父数据上下文。
类似的东西:
<button type="button" question="{{../_id}}" class="btn btn-default answer">
{{this}} {{#with ../this}}{{this._id}}{{/with}}
</button>
用于在模板中显示父问题ID,但如何正确执行此操作。我们的目标是拥有一个抓住事件的功能,并将答案与&#34; right_answer&#34;为了平等,如果有效,请给你一点意见。谢谢!
最终提出了这个解决方案,但我不是很喜欢它或者认为它是正确的:
{{each}}
{{#with ../this}}
<button type="button" question="{{../_id}}" class="btn btn-default answer">X</span></button>
{{/with}}
{{this}}
{{/each}}
答案 0 :(得分:5)
我通常做这样的事情:
Template.myTemplate.answers = function () {
var self = this;
// assume that this.answers is a list of possible answers
return _.map(this.answers, function (answer) {
return _.extend(answer, {
questionId: self._id,
});
});
}
然后你很高兴去你的模板,你可以做以下事情:
<template name="myTemplate">
{{#each answers}}
<button data-question="questionId">...</button>
{{/each}}
</template>
BTW:请注意,根据标准,在question
元素上使用html
属性不正确。您应始终在自定义代码前加data-
。
另请注意,如果您将事件附加到模板,请执行以下操作:
Template.myTemplate.events({
'click button': function (event, template) {
// ...
},
});
然后在事件回调中,您可以访问this
,它代表呈现button
元素的上下文,以及template.data
,它是附加到模板的数据上下文实例,所以实际上这或多或少是你的“父语境”。
请注意,新的模板引擎(即blaze
)允许我们在模板中使用点表示法,因此不再需要上述方法,{{../_id}}
完全正常。
答案 1 :(得分:5)
您可以在事件处理程序中访问Template.parentData(n)
:http://docs.meteor.com/#/full/template_parentdata