使用 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] }}
您的代码在此处动态提供 myTemplate
和 myData
,然后将 kerbobble(html、帮助程序、事件处理程序)填充到父模板中。
我有两个流星应用程序。每个都有一个智能包,以特定于应用程序的方式实现特定功能,比方说用户管理。我还有第三个 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] }}
您的代码在此处动态提供 myTemplate
和 myData
,然后将 kerbobble(html、帮助程序、事件处理程序)填充到父模板中。