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
时正在调用路由器操作
- 如果我在网站的初始构建中重新加载页面一次,
mwcLayout.render()
调用会起作用
- 稍后再次调用
mwcLayout.render()
没有任何作用
我已经阅读了有关该主题的内容,人们说这是单页应用程序的问题,而不是反应式构建它等等,但我不知道这为什么不是反应式的。它对 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);
大家好,
故事时间 - 不喜欢可以跳过
我刚开始使用 @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 时正在调用路由器操作
- 如果我在网站的初始构建中重新加载页面一次,
mwcLayout.render()
调用会起作用 - 稍后再次调用
mwcLayout.render()
没有任何作用
我已经阅读了有关该主题的内容,人们说这是单页应用程序的问题,而不是反应式构建它等等,但我不知道这为什么不是反应式的。它对 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);