我有一种奇怪的情况。似乎Meteor with Iron :: Router正在覆盖onhashchange事件的某个地方,但是我没有成功跟踪它。
基本上,如果我听那个事件,它永远不会因为某些原因而开火。我在各处查看和搜索,甚至找不到Meteor代码库中对onhashchange的任何引用。
if(Meteor.isClient) {
window.addEventListener('hashchange', function() {
alert('changed');
});
}
这永远不会激发 - 尽管事件已正确注册。在普通的香草中它工作得很好..所以我认为它在某处被覆盖..任何见解都将受到赞赏。
哦,还有一件事,这就是我的网址现在用于测试的方式:
http://localhost:3000/#/workflow
http://localhost:3000/#/settings/account
http://localhost:3000/#/group/add
等
答案 0 :(得分:0)
来自Iron Router guide的路由器参数部分:
如果网址中有查询字符串或哈希片段,则可以访问 那些使用this.params对象的查询和哈希属性的那些。
// given the url: "/post/5?q=s#hashFrag" Router.route('/post/:_id', function () { var id = this.params._id; var query = this.params.query; // query.q -> "s" var hash = this.params.hash; // "hashFrag" });
注意:如果要在哈希更改时重新运行函数,则可以执行此操作 这样:
// get a handle for the controller. // in a template helper this would be // var controller = Iron.controller(); var controller = this; // reactive getParams method which will invalidate the comp if any part of the params change // including the hash. var params = controller.getParams();
getParams是被动的,因此如果哈希更新,则getParams()调用应该无效并为您正在使用它的任何内容触发新计算。例如,如果你想根据哈希值动态渲染模板,你应该可以做这样的事情...... HTML:
<template name='myTemplate'>
{{> Template.dynamic template=getTemplateFromHash}}
</template>
JS:
Template.myTemplate.helpers({
getTemplateFromHash: function() {
var hash = Iron.controller().getParams().hash;
... // do whatever you need to do with the hash to figure out the template to render
}
});