铁:路由器不渲染模板

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/hellolocalhost: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

您需要将&gt; yield 放在您的正文标签中。

<body>
  <h1>Welcome to Meteor!</h1>
    > yield 
</body>

iron router guide 还将向您展示如何设置可用于在所有模板中保持一致布局的 layoutTemplate。您将 > yield 放置在布局模板中,并使用 Router.configure 函数在 layoutTemplate 中生成其他模板。

【讨论】:

好吧,我正在尝试从简单到复杂。如果最简单的行之一 (Router.route('/items');) 没有显示任何内容,我怎么能期望 Router.configure&gt; 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,不过还是要找到铁路由器。

以上是关于铁:路由器不渲染模板的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 具有相同模板的多个路由不应重新渲染

Django 路由分配和模板渲染

流星中的动态页面渲染

如何使用铁路由器或流星本身提供文件?

django路由分配及模板渲染

带参数的模板订阅行为