使用 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】:对于您的模板名称,请坚持使用大写或小写语法,此时您同时拥有<template name="dashboard">
和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 中的某个新页面或模板