【发布时间】:2016-02-25 09:43:21
【问题描述】:
我有两个流星应用程序。每个都有一个智能包,以特定于应用程序的方式实现特定功能,比如说用户管理。我还有第三个流星智能包,它位于 shared 包目录中。第三个包具有两个应用程序通用的用户管理模板。我用的是铁路由器。
我需要将共享模板与应用模板结合起来。 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 关键字(可以吗?)那么我想知道是否这真的是实现共享模板的唯一方法吗?
【问题讨论】:
-
什么是非布局模板? Meteor 模板定义为 HTML/blaze。
-
使用 iron-router 某些模板可以指定为layout templates。此类模板可以利用
yield关键字动态包含特定于路由的详细信息模板。 非布局模板是没有被如此指定的模板,因此不能使用yield关键字。 -
Blaze 模板其实都是一样的,如果有
{{> yield}}可以作为i-r 中layoutTemplate:的参数。任何模板都可以直接使用{{> templateName }}嵌套另一个模板,而无需使用 i-r。那么你到底想做什么?你能显示代码和什么不工作吗? -
@MichelFloyd 我添加了一个示例。我希望这能让事情更清楚
标签: templates meteor iron-router