铁:路由器不渲染模板
Posted
技术标签:
【中文标题】铁:路由器不渲染模板【英文标题】:iron:router not rendering template 【发布时间】:2015-12-24 07:38:45 【问题描述】:我正在使用 iron:router 包开发流星。 我的 javascript 文件包含:
Router.route('/', function ()
this.render('home');
,
name: 'home'
);
Router.route('/hello', function ()
this.render('hello');
);
我的 html 文件包含:
<head>
<title>test</title>
</head>
<body>
<h1>Welcome to Meteor!</h1>
</body>
<template name="hello">
<button>Click Me</button>
<p>You've pressed the button counter times.</p>
</template>
<template name="home">
<h2>Home</h2>
<p>You are on the home screen.</p>
</template>
无论我写什么(localhost:3000/hello
或localhost:3000/
),都按照the tutorial 的规定,无论如何它都不会呈现任何模板。它只是显示标题“Welcome to Meteor!”就是这样。
当我写任何其他未声明的地址(例如localhost:3000/abc
)时,它会向我显示:
欢迎来到流星!糟糕,客户端上似乎没有路由,或者 url 的服务器:“http://localhost:3000/abc.”
所以它肯定在 javascript 文件中做了一些正确的事情,因为它可以识别它应该知道的模板,但是在写入正确的地址时,它仍然什么都不显示。
我尝试查看其他解决方案,检查包名称是否为“iron:router”而不是“iron-router”,以及其他解决方案,但没有任何效果。请帮帮我...
编辑:根据要求,这里是项目https://github.com/yokhen/test2的存储库
【问题讨论】:
它甚至没有看到 iron:router 包,因为它显示了基本模板(在body
标签中)。否则,如果是路由问题,您会看到类似Whooops, route for ... doesn't exist
的内容。你的路由 .js 文件在哪里?在 lib 目录下?
@Sindis 我刚刚添加了额外的信息。我的 .js 文件在项目文件夹中
在您的 html 文件中只保留模板,删除 body 和 head 标签 - 它现在显示什么?
@Sindis 是的,也尝试过,但没有任何结果。我可能会尝试一下 meteorBuzz 的答案,但这需要我几分钟,希望它能奏效。
meteorBuzz 的答案是关于布局的,我认为这不会产生影响——也许可以使用您已经完成的代码创建简单的 github 存储库,我们会检查它
【参考方案1】:
创建一个“lib”文件夹并将代码放入其中。
lib/router.js
您需要将> yield
放在您的正文标签中。
<body>
<h1>Welcome to Meteor!</h1>
> yield
</body>
iron router guide 还将向您展示如何设置可用于在所有模板中保持一致布局的 layoutTemplate。您将 > yield 放置在布局模板中,并使用 Router.configure
函数在 layoutTemplate 中生成其他模板。
【讨论】:
好吧,我正在尝试从简单到复杂。如果最简单的行之一 (Router.route('/items');
) 没有显示任何内容,我怎么能期望 Router.configure
和 > yield
为我工作?尽管如此,我试过了,它也没有显示任何东西。它仍然可以识别路线,但根本不显示任何模板。
@Yokhen,查看您的 github 后,您必须在根级别创建一个“lib”文件夹并将路由器代码放入其中。
有什么地方可以更详细地了解这一点吗?我很惊讶我没有读过任何关于这个或完全错过它的东西.. U_U
是的,根本没有提到 lib 文件夹,但我尝试了解决方案。我添加了一个 lib 文件夹,创建了一个“router.js”文件并将所有的 iron:router 代码移到那里,但没有任何改变...... U_U 我试图在 github 中显示这个,但是提交的过程是如此复杂...【参考方案2】:
首先我必须添加 EJSON 包,因为 iron:router 没有看到它(虽然我在 Windows 上测试它,也许这就是我遇到这个问题的原因)
meteor add ejson
解决了
您的项目目录应如下所示:
Routes.js
Router.route('/', function ()
this.render('Home');
);
Router.route('/items');
test2.js
Template.items.helpers(
);
Template.items.events(
);
Template.Home.helpers(
);
Template.Home.events(
);
test2.html
<template name="Home">
<h1>Simplest template home ever</h1>
</template>
<template name="items">
<h1>Simplest home items template</h1>
</template>
【讨论】:
哇。我的英雄!是的,我也在使用 Windows。不幸的是,在昨天把我的听力撕了这么多之后,我切换到了流路由器。你认为我应该改变还是坚持? 我没有使用过流量路由器,但我听说过一些不错的选择,也有一些消极的选择。你应该检查文档,也许阅读 SO 并使用更适合你的东西 我一直在尝试为两者找到一个 API,但我似乎找不到任何,只有教程。编辑:没关系,找到流路由器github.com/kadirahq/flow-router#api,不过还是要找到铁路由器。以上是关于铁:路由器不渲染模板的主要内容,如果未能解决你的问题,请参考以下文章