【问题标题】:Sharing non-layout templates between apps using Meteor使用 Meteor 在应用程序之间共享非布局模板
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 2011-02-28
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多