我正在研究一个简单的流星闪卡应用程序.每个问题都有一组:text,right_answer,wrong_answers.
将答案连接成一个数组并进行洗牌,然后模板列出一个问题和可能的答案.当用户单击答案时,如何从事件中获取JS中的父数据上下文.
就像是:
<button type="button" question="{{../_id}}" class="btn btn-default answer">
{{this}} {{#with ../this}}{{this._id}}{{/with}}
</button>
Run Code Online (Sandbox Code Playgroud)
用于在模板中显示父问题ID,但我该如何正确地执行此操作.目标是拥有一个抓取事件的函数,并将"right_answer"的答案与相等性进行比较,如果有效,则给出一个点.谢谢!
最终提出了这个解决方案,但我真的不喜欢它或认为它是正确的:
{{each}}
{{#with ../this}}
<button type="button" question="{{../_id}}" class="btn btn-default answer">X</span></button>
{{/with}}
{{this}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)
我通常做这样的事情:
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,
});
});
}
Run Code Online (Sandbox Code Playgroud)
那么你很高兴去你的模板,你可以做以下事情:
<template name="myTemplate">
{{#each answers}}
<button data-question="questionId">...</button>
{{/each}}
</template>
Run Code Online (Sandbox Code Playgroud)
顺便说一句:注意,根据标准question
,html
元素的使用属性是不正确的.您应始终为自定义标记添加前缀data-
.
另请注意,如果您将事件附加到模板,请执行以下操作:
Template.myTemplate.events({
'click button': function (event, template) {
// ...
},
});
Run Code Online (Sandbox Code Playgroud)
然后在你有权访问的事件回调中this
,它代表了button
呈现元素的上下文,以及template.data
附加到模板实例的数据上下文,因此实际上这或多或少是你的"父上下文".
请注意,新的模板引擎,即blaze
允许我们在模板中使用点符号,因此不再需要上面描述的方法,并且{{../_id}}
完全没问题.
归档时间: |
|
查看次数: |
6556 次 |
最近记录: |