如何在仪表板中隐藏/显示模板组件
创建新路线?这是否应该在使用某种类型的助手中完成
html 中的 if/else 逻辑以及在按钮单击时使用助手?
你可以这样做,但你应该注意一些要点来保持你的代码干净和模块化:
- 尝试将仪表板的某些部分封装到自己的模板中,以保持代码整洁
- 使用
ReactiveDict 支持许多ReactiveVar 实例
- 将重复出现的部分也包含在模板中以减少重复代码
- 在全局范围内或在仪表板的最上方模板中注册经常性助手
- 在父模板上订阅在仪表板所有部分之间共享的数据,并订阅各个组件中的本地数据
- 使用
autorun 和subscription.ready() 并显示加载指示器,直到订阅准备就绪。不要等到所有内容都加载完毕后再进行渲染,因为这可能会显着降低用户体验。
假设我想在仪表板模板中显示不同的内容
基于按钮点击 (href)。
您可以将数据属性附加到按钮,该属性具有要切换的目标的特定 ID:
<template name="dashboardComponent">
<a href class="toggleButton" data-target="targetId">My Link</a>
</template>
然后您可以读取此 ID 并在您的 ReactiveDict 中切换它的状态:
Template.dashboardComponent.events({
'click .toggleButton'(event, templateInstance) {
event.preventDefault();
// get the value of 'data-target'
const targetId = $(event.currentTarget).attr('data-target');
// get the current toggle state of target by targetId
const toggleState = templateInstance.state.get( targetId );
// toggle the state of target by targetId
templateInstance.state.set( targetId, !toggleState );
}
});
在您的模板中,您可以要求通过简单的 if / else 进行渲染:
<template name="dashboardComponent">
<a href class="toggleButton" data-target="targetId">My Link</a>
{{#if visible 'targetId'}}
<div>target is visible</div>
{{/if}}
</template>
你的助手正在返回状态:
Template.dashboardComponent.helpers({
visible(targetName) {
return Template.instance().state.get(targetName);
}
});
可能存在在父模板和子模板之间共享状态的问题,我建议您尽可能避免使用Session。然而,作为初学者,首先使用Session 会容易得多,然后一步一步地朝着更加解耦(参数化模板)的解决方案工作。
请提供易于使用的最佳实践和良好解决方案
很多组件。
这是一个很高的要求,你有能力为这两者努力!然而,这里有一个简短的介绍: