0

我在我的 meteorjs 项目中使用 Iron-router。我正在使用 after: 处理程序来设置显示或隐藏传单地图的会话变量。我不能像往常一样把地图放在我的模板中,因为meteorjs 抹去了地图div 和它的状态。

现在我正在添加引导菜单和下拉菜单,它们构建为带有 h​​ref="#" 的锚标记,如下所示:

<ul class="nav nav-pills">
    <li class="active"><a href="#">Home</a></li>
    <li><a href="#">Profile</a></li>
    <li class="disabled"><a href="#">Disabled</a></li>
</ul>

单击这些菜单不会留下 url,但它会导致 Iron-router 在每次单击或子菜单钻取时调用 my after: 处理程序。

有没有办法防止这种情况?这对我的项目没有害处,但似乎不干净。

4

4 回答 4

2

您可以在单击 # 链接时阻止默认行为。

Router.configure({
  layoutTemplate: 'appLayout'
  ...
});

如果你的布局是 appLayout

Template.appLayout.events({
  "click [href=#]": function(e) {
    e.preventDefault();
  }
});
于 2014-01-12T01:52:51.800 回答
1

路由器拦截所有链接点击以正常工作,因此阻止它不是一件容易的事(我猜也不是一个好主意)。

您可以通过将地图正常放置在模板中来解决该问题,但要放在一个常量 block中。每当您进行一些自定义 DOM 操作时,它们都很有用。

于 2014-01-08T08:35:13.150 回答
1

默认情况下iron-router附加到带有选择器的链接a[href]。我发现这效果不太好(尤其是使用引导插件)并开发了一个修复https://github.com/EventedMind/iron-router/pull/324

您可以像这样修改链接选择器:

if (Meteor.isClient){
  IronLocation.configure({
    linkSelector: "a[href][data-iron]"
  });
}

使用此设置,iron-router 将仅拾取具有该data-iron属性的链接。

另一种方法是在它到达链接处理程序之前尝试绑定a[href="#"]并调用。event.stopPropagation()iron-router

于 2014-01-08T08:35:48.497 回答
1

只需使用ian:bootstrap-3

默认情况下,这将与 Iron-router 一起使用

meteor add ian:bootstrap-3
于 2014-11-04T13:12:57.913 回答