我遇到了一个看似简单的问题,但我找不到真正的解决方案。我有2列:一栏概述了不同的任务,一栏列出了单击每个任务所附的“更多信息”按钮时应显示有关该任务的详细信息的区域。我的逻辑是:
有2个模板:task_short和task_long
单击task_short中的按钮后,使用Blaze.render将task_long渲染为第二列中的div。
当在另一个task_short上单击“更多信息”时,使用Blaze.remove删除视图。
我的主要问题是:如何告诉Meteor应该在task_long中呈现哪个任务? task_short通过每个任务循环获取其{{content}},{{name}}等参数。但是,我该如何完成一项任务?另外,我不太了解Blaze.remove。我需要从哪里传递ViewId?
我非常感谢您的帮助!
最佳答案
这可以通过会话变量和模板中的一些条件来解决。除非您正在做一些特别的事情,否则无需使用Blaze.render
/ Blaze.remove
。我不知道您的模板的确切结构,但是此示例应为您提供如何做的想法:
app.html
<body>
{{#each tasks}}
{{> task}}
{{/each}}
</body>
<template name="task">
<div class='short'>
<p>Here are the short instructions</p>
<button>More information</button>
</div>
{{#if isShowingLong}}
<div class='long'>
<p>Here are the long instructions</p>
</div>
{{/if}}
<hr>
</template>
app.js
if (Meteor.isClient) {
Template.body.helpers({
tasks: function () {
// return some fake data
return [{_id: '1'}, {_id: '2'}, {_id: '3'}];
}
});
Template.task.helpers({
isShowingLong: function () {
return (this._id === Session.get('currentTask'));
}
});
Template.task.events({
'click button': function () {
Session.set('currentTask', this._id);
}
});
}