Meteor's iron:router isn't doing {{renderRouter}} as expected or documented

笑着哭i 提交于 2019-12-08 04:00:24

问题


I've got a very simple template problem going on that appears to be similar to this guy's problem, though I've tried to build a simple example to demonstrate the problem and hopefully have someone explain to me how to fix or work around it.

Although as I'm doing some online research, it may be that the official documentation is out of date with the code. The reason I haven't bought into accepting that just yet is that the problem seems to have existed for a while, the dates on such articles in forums appears to be fairly old, and there's talk of it being fixed. There's also talk the feature is gone. What's the new way, if there is one?

I'm using Meteor 0.9.0.1 with iron:router 0.9.1. Specifically, I set up my project like this:

$ meteor create ironTest
$ cd ironTest
$ meteor add iron:router
$ meteor

Pointing my browser at http://localhost:3000/ as instructed, shows the default project. So far so good.

Now make ironTest.html contain this:

<body>
  <h1>Before</h1>
      {{renderRouter}}
  <h2>Afterward</h2>
</body>

<template name="hello">
    Hello Template
</template>
<template name="goodbye">
    Goodbye Template
</template>

Make ironTest.js contain this:

Router.configure({
  autoRender: true  // we will experiment with this Boolean shortly
});

Router.map(function () {
  this.route('hello');
  this.route('goodbye');
});

If you go to the routes http://localhost:3000/hello and http://localhost:3000/goodbye, you'll see the templates correctly render as expected and documented, appended to the <body> element, so it appears after the <h2> element.

According to the current documentation for iron:router, one should be able to set the autoRender property to false, and the template should no longer be appended to the <body> element, but rather be injected where the Handlebars (okay, Spacebars) element {{renderRouter}} is, that is, between the <h1> and <h2> elements.

When I try this, visually it doesn't do anything. Opening a JavaScript Console to look at errors shows none. Although, by deliberately going to an invalid route it will show a missing template router exception, showing the routing code is indeed working.

Does anyone know how to coerce the code above into working?


For the curious, I've got a working simplistic equivalent that might be of use to others working this problem.

This new ironTest.html uses a template (for a layout) with no <body>:

<template name="main">
  <h1>Before</h1>
      {{> yield}}
  <h2>Afterward</h2>
</template>

<template name="hello">
    Hello Template
</template>
<template name="goodbye">
    Goodbye Template
</template>

This ironTest.js instead uses a layout:

Router.configure({
  layoutTemplate : 'main'
});

Router.map(function () {
  this.route('hello');
  this.route('goodbye');
});

It's worth an aside that this solution doesn't work for me, as I don't want a global layout, and have concern that riddling layouts in the route themselves is a tighter coupling than desired for my purposes.

I'm currently looking for a way to dump debugging log information from the Router as it performs transitions, but that's another story.

来源:https://stackoverflow.com/questions/25612913/meteors-ironrouter-isnt-doing-renderrouter-as-expected-or-documented

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!