使用 Meteor 在应用程序之间共享非布局模板

Sharing non-layout templates between apps using Meteor

我有两个流星应用程序。每个都有一个智能包,以特定于应用程序的方式实现特定功能,比方说用户管理。我还有第三个 meteor smart 包,它位于 shared 包目录中。第三个包具有两个应用程序通用的用户管理模板。我用的是iron-router.

我需要将共享模板与应用程序模板结合起来。 Iron-Router 有 yield 关键字。这对于组合模板很有用。问题是这只适用于特殊的、指定的布局模板。

如何使用 meteor 和 iron-router 组合或嵌套不是布局模板的模板?

例子

在下面的简化示例中,您可以看到三个包及其相应的模板。 app-*:user 包实现应用特定的用户模板,shared:user 包实现共享用户模板。

app-1:用户

appUser.tpl.jade

p This is some App-1 specific text

app-2:用户

appUser.tpl.jade

p This is some App-2 specific text

共享:用户

user.tpl.jade

h1 This is a shared title
+appUser

routes.coffee

Router.route '/user', name: 'user'

这里的问题是嵌套模板必须在两个依赖的智能包中被调用appUser。这不仅阻止了模板名称对应用程序的适当描述,而且更令人担忧的是,它与模板名称紧密耦合并导致脆弱的代码。

为了防止模板的这种紧密耦合,iron-router 允许我们使用 yield 关键字,但是由于我们不能在这种情况下使用 yield 关键字(可以吗?)那么我想知道这是否真的是实现共享模板的唯一方法?

您可能会从 dynamic templates 中受益。这些模板的名称可以通过助手(全局定义或绑定到父模板)传入,甚至可以由助手设置其数据上下文。

{{> Template.dynamic template=myTemplate [data=myData] }}

您的代码在此处动态提供 myTemplatemyData,然后将 kerbobble(html、帮助程序、事件处理程序)填充到父模板中。