有支持URL片段的Meteor路由器吗?比如window.location.hash?

3
我最近在使用Meteor的Iron Router,我惊奇地发现从一个页面到另一个页面使用路由器浏览实际上会重新加载整个页面内容。这是因为当从一个页面浏览到另一个页面时,URL路径会改变。这对于可以被搜索引擎浏览的网站可能很有用,但对于构建Web应用程序来说,这不是我要寻找的东西。
事实上,我期望的是基于片段的东西,其中更改片段会将其放入会话中,以便我可以直接在模板中使用它。以下代码应该产生所需的效果(jQuery):
$(window).on('hashchange', function() {
  Session.set('hash', window.location.hash);
});

但在使用自己的解决方案之前,我想确保我没有重复造轮子。是否有任何Meteor路由器或其他支持基于片段(而不是路径)进行页面渲染的框架?


3
很奇怪,IronRouter 使用 HTML5 历史推送状态来提供你所需的功能。 以 iron-router-progress.meteor.com 这个示例为例,它应该在现代浏览器中表现出你期望的行为。 - saimeunt
2
我同意@saimeunt的观点,iron-router应该适合你的目的——在我的应用程序中更改路由时,我绝对不会看到页面重新加载。也许你所有的路由都是出于某种原因而在服务器端?或者你可以使用page.js(http://visionmedia.github.io/page.js/),已经有一个meteor包(https://atmosphere.meteor.com/package/page-js)可供使用。 - Christian Fritz
@saimeunt 好的,我知道了。我之前是手动浏览从一个页面到另一个页面,直接改变浏览器地址。现在我意识到使用实际链接 <href="/aPage">测试</a> 可以按照我预期的方式工作。 - Flavien Volken
个人认为目前可用的路由器在处理反应性方面有些奇怪。对我来说,一个真正的反应式路由器只会帮助您将路径反应地映射到用户定义的一组反应变量(例如SessionReactiveDict中的变量),然后您可以在其他逻辑中使用它们,从而保留反应式流程。很高兴看到我不是唯一这样想的人。我正在开发一个按照这种方式工作的路由器包,但它还没有公开发布。顺便说一句,Meteor有renderDynamic调用,专门为此而设计。 - Jostein
2个回答

1
iron-router只要我们通过标签ClickMe或者通过Router函数Router.go('/somePage');来实现页面跳转,就不会真正重新加载整个页面。但如果手动在浏览器地址栏中输入URL,则会重新加载整个页面(使用片段则不会出现这种情况)。
对于那些希望将片段动态放入会话中的人,以下是我使用的完整代码:
function storeHashInSession()
{
  Session.set('hash', window.location.hash);
}

Meteor.startup(function()
{
    storeHashInSession();
});

$(window).on('hashchange', function()
{
    storeHashInSession();
});

0

我认为这取决于您使用的浏览器。我已经有一段时间没有看过iron-router了,但是从版本0.6.0开始,非IE浏览器使用HTML5历史记录推送状态,而IE<10每次都会从服务器请求新页面。

请参阅此问题以获取详细信息:https://github.com/EventedMind/iron-router/issues/14

对于我们的创业公司,我们仍在使用mini-pages

如果iron-router尚未支持IE<10中的推送状态,则希望它很快能够支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接