MWC:如何在 URL 更改时重新呈现

MWC: how to rerender on URL change

大家好,

故事时间 - 不喜欢可以跳过

我刚开始使用 @aruntk 的 Synthesis 来使用 Meteor + Polymer,我对结果感到非常高兴,也很感激他在这个项目上投入的时间。不过我遇到了一个问题。

我以前只更改了一个 iron-pages 对象来更改我的视图内容。把它放在像 FlowRouter.route("/", action: {ironpages.select("home");}); 这样的 FlowRouter 中就可以了。但是,我的站点变得越来越复杂,我现在想重新呈现整个部分。有人告诉我要被动地做这件事(据我所知)这是在这里构建应用程序的首选方式。

tl;dr - 如果您不关心故事,请跳至此处

所以我所做的只是将 mwcLayout.render("test-layout",{"main":"yas-manual-page"}); 放入我的 Router 操作中。但是,我必须重新加载以使更改可见,这不是我想要的。

我已经阅读了有关该主题的内容,人们说这是单页应用程序的问题,而不是反应式构建它等等,但我不知道这为什么不是反应式的。它对 URL 变化做出反应。

如果您有时间,请与我分享一些见解,我真的被困住了。 :slight_smile:

祝大家有美好的一天!


免责声明:这是来自 Meteor 论坛的转贴,建议转至此处。

此行为是作为 mwc 布局的一项功能添加的,以防止在每次路由更改期间多次重新渲染。此处的解决方法是创建另一个 mwc 布局或设置第三个参数 forceRender。来自 mwc:layout 文档

forceRender

在 mwc:layout 中,我们不会重新渲染布局,除非新布局不等于当前布局或设置了 forceRender 参数。这是为了防止在更改路由时发生不必要的重新渲染(即使您更改 param/queryparam 路由也会重新运行,因此在 FlowRouter 操作中编写的渲染函数也会重新运行)。当您必须在保持当前布局的同时更改渲染时,forceRender 会派上用场。

...
<mwc-layout id="demo-landing">
      <div region="header"></div>
      <div region="main"></div>
</mwc-layout>
...

imports/startup/client/router.js

...
  action:function(params,queryParams){
    mwcLayout.render("demo-landing",{"main":"test-layout1","header":"test-header"});
  }
...

现在如果你尝试

mwcLayout.render("demo-landing",{"main":"test-layout2","header":"test-header"});

从控制台它不会工作,因为布局没有改变并且 forceRender 没有设置。

这有效->

mwcLayout.render("demo-landing",{"main":"test-layout","header":"test-header"},true);