使用 Iron Router 在 Meteor 包中包含 HTML 模板

Posted

技术标签:

【中文标题】使用 Iron Router 在 Meteor 包中包含 HTML 模板【英文标题】:Including an HTML Template in a Meteor Package with Iron Router 【发布时间】:2015-08-31 16:20:51 【问题描述】:

我试图在我自己的演示 Meteor 应用程序中模仿 Telescope 应用程序结构。他们设置事物的方式意味着所有代码都位于子包中,包括 html 模板等。

我已经设置了 Meteor 应用程序,因此我拥有以下内容:

客户端 layout.html(包含head标签,用作页面的“基础”)

服务器

index.js(包含Iron路由器的配置,如默认layoutTemplate

myapp-ui 客户端 dashboard.html myapp-ui.js package.js

在我的包中的 package.js 文件中,我在尝试加载 HTML 模板时有以下代码:

Package.describe(
    name: 'myapp-ui',
    version: '0.0.1',
    documentation: null
);

Package.onUse(function (api) 
    api.versionsFrom('1.1.0.2');

    api.use([
        'iron:router'
    ]);

    api.addFiles([
        'client/dashboard.html'
    ]);

    api.addFiles('myapp-ui.js');
);

myapp-ui.js 文件包含尝试将dashboard.html 代码导入我的应用程序的代码:

Router.route('/', function() 
    this.render('Dashboard');
);

dashboard.html 模板很简单:

<template name="dashboard">
    <p>Hello, world!</p>
</template>

问题是,当访问应该加载仪表板的localhost:3000页面时,我得到一个错误:

Couldn't find a template named "Dashboard" or "dashboard". Are you sure you defined it?

我有点困惑,因为我显然有一个模板 HTML 文件加载了一个名为“dashboard”的模板标签,而这个文件是用api.addFiles 加载到我的包中的。我是否需要使用其他包来启用包内的 HTML 加载,还是我的代码不正确?

【问题讨论】:

【参考方案1】:

对于您的模板名称,请坚持使用大写或小写语法,此时您同时拥有&lt;template name="dashboard"&gt;this.render('Dashboard');

您是否真的使用meteor add myapp-ui 将您的包添加到应用程序中?

尝试在客户端依赖templating包,只在客户端加载client/dashboard.htm

api.use("templating", "client");
[...]
api.addFiles("client/dashboard.html", "client");

【讨论】:

无论模板名称是大写还是小写,我仍然遇到同样的问题。包肯定是添加的,因为添加路由到路由器的代码正在运行。

以上是关于使用 Iron Router 在 Meteor 包中包含 HTML 模板的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Iron Router Meteor 中检查当前路线

Meteor js,iron-router,在服务器端使用 Route.go('...') 进行单元测试不起作用

使用 Iron Router 路由到 Meteor autoform 提交的新数据?

使用 Iron:router 将某些功能或事件的输出返回到 Meteor 中的某个新页面或模板

Meteor 或 Iron Router 是不是会干扰锚标记上的 jQuery 事件?

在页面转换完成时暂停 Meteor 的 Iron Router 中的路由