我做了一些href,它引用了标题中页面的特定部分。 我正在使用把手,而href在标题模板中,而目标位于另一个模板中,这里是我的代码片段:
header.html中的:
<li><a href="#PLATEAU"> PLATEAU </a> </li>
shop_page.html中的:
<h2> <span id="PLATEAU">PLATEAU</span></h2>
预期结果: 当我点击标题中的超链接时,我希望使用目标ID进行跨度。
实际结果: 我看到我的路径变为#PLATEAU,但我没有跳到页面的正确部分。
其他信息: 使用铁路由器,bootstrap-3包。铬。 macbook pro。流星版0.7.1.2
任何帮助表示赞赏!
干杯
答案 0 :(得分:0)
如Iron Router docs中所述,查询字符串和哈希不用于路由。如果您需要路由,则可以使用actualPath/plateau
代替actualPath#Plateau
,并使用铁路由器呈现您的新内容。
但如果你想在这里使用de hashs,你可以做些什么。我为标签系统做了这个。
Handlebars.registerHelper('currentTab',function(page){
return Session.get('activeTab') == page;
});
在HTML中:
{{#if currentTab 'PLATEAU'}}
{{> PLATEAU}}
{{/if}}
<template name="PLATEAU">
<h2> <span id="PLATEAU">PLATEAU</span></h2>
</template>
再次在你的js中
Template.yourTemplate.events({
'click .tabChange': function(e, t) {
Session.set('activeTab', window.location.hash);
}
});
我不再使用它,所以这是一个未经测试的代码。 This answer也许可以帮到你。
强烈建议您使用path/:activeTab
来获得更好的代码。
答案 1 :(得分:0)
假设shop-page.html被称为&#39; shop-page&#39;在router.js文件中,您可以执行以下操作:
# Create link to anchor
<li><a href="{{pathFor 'shop-page' hash='plateau'}}">PLATEAU</a></li>
# Set anchor
<h2><span id="plateau">PLATEAU</span></h2>
答案 2 :(得分:0)
我也经历过这个。 默认情况下链接不在Metoer中工作(我在某处看到它与火焰有关),#linking虽然应该可以工作,但链接到新页面需要路由
答案 3 :(得分:0)
这是在Meteor 1.2.1(使用铁路由器1.0.12)上测试的 - 也应该适用于更高版本(旧版本可能需要在提供的代码中进行一两次更改) < / p>
首先,最好将标记更改为
<li><a href="{{pathFor route='yourRouteName' hash='PLATEAU'}}">PLATEAU</a></li>
现在..你需要一个针对这个持久性issue的解决方法,这是我使用的方法:
Router.onAfterAction(function() {
var hash = this.getParams().hash;
Tracker.afterFlush(function() {
if (hash && $("#"+hash).length) {
// go to element
Tracker.nonreactive(function() {
window.location.hash = "";
window.location.hash = "#"+hash;
});
}
});
});
// go to element
之后的部分还有其他一些想法:
var scrollTop = $("#" + self.params.hash).offset().top;
$("html,body").scrollTop(scrollTop);
或(有动画):
var scrollTop = $("#" + self.params.hash).offset().top;
$("html,body").animate({
scrollTop: scrollTop
});
}
引用(github上的相关铁路由器问题):