我试图在我自己的演示 Meteor 应用程序中模仿 Telescope 应用程序结构。他们的设置方式意味着所有代码都位于子包中,包括 HTML 模板等。
我有 Meteor 应用程序设置,因此我有以下内容:
- 客户端
- layout.html(包含 head 标签,用作页面的“基础”)
服务器
- index.js(包含 Iron 路由器的配置,例如默认的
layoutTemplate
)
- index.js(包含 Iron 路由器的配置,例如默认的
包
- myapp-ui
- 客户端
- 仪表板.html
- myapp-ui.js
- package.js
- 客户端
- myapp-ui
在我的包中的 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,还是我的代码不正确?
最佳答案
坚持使用大写或小写语法作为模板名称,目前您同时拥有 <template name="dashboard">
和this.render('Dashboard');
.
您实际上是否使用meteor add myapp-ui
将包添加到应用程序中?
尝试依赖templating
在客户端打包并加载client/dashboard.htm
仅在客户端上:
api.use("templating", "client");
[...]
api.addFiles("client/dashboard.html", "client");
关于javascript - 在带有 Iron Router 的 Meteor 包中包含 HTML 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857577/