流星可选模板

时间:2018-08-04 00:48:46

标签: javascript meteor meteor-blaze spacebars

因此,我已经开始学习Meteor,并试图了解如何正确格式化模板。这是我设置项目的方式:

  • A / view.html-模板A的html文件
  • A / script.js-导入A / view.html。可能会成为进行交互的“控制者”
  • B / view.html-模板B的html文件
  • B / script.js-导入A / view.html。可能会成为进行交互的“控制者”
  • routes.js-路由文件,包括模板A和B的所有script.js

所以我有两个问题:

  • 首先,我想将A作为基本模板,这意味着它将具有样式和javascript标签以及“样式”和“脚本” 可选块,以防孩子模板要添加额外的文件。 我该怎么做?我尝试了常规方法:

    • 在每个子模板中创建2个名为 styles scripts 的块。这是行不通的,因为route.js会导入所有内容,流星抱怨说有2个模板具有相同的名称
    • 使用Template.dynamic。这项工作有效,但是我必须在“样式”和“脚本”块中声明要渲染的模板,在我看来,当项目变大时,这有点不整洁。
  • 第二个问题,正如我描述的那样,我目前正在使用路由做什么,将块本地化(?)到当前文件的最佳方法是什么?

  • 是否可以在2个不同的子模板中有2个称为“脚本”的块并且流星没有抱怨?

谢谢大家:)

1 个答案:

答案 0 :(得分:0)

我不确定100%表示“块”是什么意思,但是我假设您想让A成为其他所有内容都适合的模板,然后再添加其他页面?

如果是这样,听起来您想使用动态模板,并以A作为布局。

这里是一个布局示例,该布局从我的一个项目中导入其他模板(实际上是导入两个常量模板(loginNavbar和modalWindow)以及动态模板,具体取决于我对它的调用。您可以添加尽可能多的模板样式和其他您想要的布局本身):

<template name="loginLayout">
    <div class="loginNavbarTemplateDiv">
        {{> loginNavbar}}
    </div>
    <div class="loginContentTemplateDiv">
        {{> Template.dynamic template=content}}
    </div>

    {{> modalWindow}}
</template>

然后,我的routes.js如下所示(将外部loginLayout带有login或register的内部内容):

FlowRouter.route('/login', {
    name: 'login',
    action: function() {
        BlazeLayout.render("loginLayout", { content: 'login' });
    }
});

FlowRouter.route('/register', {
    name: 'register',
    action: function() {
        BlazeLayout.render("loginLayout", { content: 'register' });
    }
});

总体而言,我不会有两个名称相同的模板,而且如果您正确地构建文件/应用程序,也应该不会太麻烦。

请告诉我这是否有帮助,还有其他问题,我很乐意为您提供帮助。

-

如果您想了解更多信息,可以在这里找到有关动态模板的出色教程:

https://themeteorchef.com/tutorials/using-dynamic-templates

以及有关如何构建Meteor应用程序文件的指南(帮助大量工作并使一切变得更好):

https://guide.meteor.com/structure.html