在Meteor 1.3中重新渲染路线更改模板

在Meteor 1.3中重新渲染路线更改模板,meteor,meteor-blaze,flow-router,Meteor,Meteor Blaze,Flow Router,我正在为一个简单的网站使用Flow Router和Blaze渲染器(想想博客/宣传册软件) 我正在使用FlowRouter.path()在菜单元素上创建链接。当单击这些链接并触发路由上的操作()方法时,url将按预期更改。但是,模板似乎没有被刷新,模板帮助程序也没有被触发 my/lib/route.js文件中的路由是 const about = FlowRouter.group({ prefix: '/about' }); about.route('/:pageSlug/:subSecti

我正在为一个简单的网站使用Flow Router和Blaze渲染器(想想博客/宣传册软件)

我正在使用
FlowRouter.path()
在菜单元素上创建链接。当单击这些链接并触发路由上的
操作(
)方法时,url将按预期更改。但是,模板似乎没有被刷新,模板帮助程序也没有被触发

my/lib/route.js文件中的路由是

const about = FlowRouter.group({
  prefix: '/about'
});

about.route('/:pageSlug/:subSectionSlug', {
  action: (params) => {
    console.log('action() fired :' + params.pageSlug + ' :' + params.subSectionSlug);
    BlazeLayout.render( 'applicationLayout', {
      main: 'basicPage',
    });
  },
  name: 'pageSubsection',
});
然后我的模板看起来像-

<template name="applicationLayout">
        {{> Template.dynamic template=main}}
</template>

<template name="basicPage">
    <div id="pageWrapper">
        ...
        <aside class="leftBar subSectionMenu">
            {{> sidebar }}
        </aside>
        ...
    </div>
</template>

<template name="sidebar">
    <ul class="pageMenu">
        {{#each subSections }}
            {{> sidebarItem}}
        {{/each}}
    </ul>
</template>

<template name="sidebarItem">
    <a class="sidebarItemAnchor" href="{{ href }}">
        <li class="sidebarItem .hoverItem {{#if isSelected }} selected {{/if}}">
            {{title}}
            <span class="sidebarArrow"></span>
        </li>
    </a>
</template>
我想我一定是误解了模板是如何(以及何时)呈现的


当路由发生变化时,我需要做什么来重新呈现这些模板?

Flow Router就是这样设计的。它不会自动重新渲染

一个简单的修复方法是添加
FlowRouter.watchPathChange()编码到依赖于路由参数的所有模板帮助程序中

因此,在本例中,请更新sidebar.js-

Template.sidebarItem.helpers({
  isSelected() {
    FlowRouter.watchPathChange();
    const slug = FlowRouter.current().params.subSectionSlug;
    if (this.slug === slug) {
      return true;
    } else {
      return false;
    }
  },
});

当在sidebarItem模板中使用该助手时,它现在会在路径更改时更新。

Flow Router的设计就是这样工作的。它不会自动重新渲染

一个简单的修复方法是添加
FlowRouter.watchPathChange()编码到依赖于路由参数的所有模板帮助程序中

因此,在本例中,请更新sidebar.js-

Template.sidebarItem.helpers({
  isSelected() {
    FlowRouter.watchPathChange();
    const slug = FlowRouter.current().params.subSectionSlug;
    if (this.slug === slug) {
      return true;
    } else {
      return false;
    }
  },
});

当该助手在sidebarItem模板中使用时,现在只要路径发生更改,它就会更新。

Hi。你有什么解决办法吗?我希望它的行为像一个正常的路线变化没有重新加载整个页面。其他的建议是使用BlazeLayout.reset(),它基本上会进行重新渲染,但感觉非常难看。你有什么解决办法吗?我希望它的行为像一个正常的路线变化没有重新加载整个页面。其他的建议是使用BlazeLayout.reset(),它基本上会进行重新渲染,但感觉非常难看&糟糕