【问题标题】:Execute route change before event function在事件功能之前执行路线更改
【发布时间】:2015-05-10 01:15:25
【问题描述】:

我有一个菜单项列表,每个项都是一个a 标记。在这些里面,我在div 中有通知气泡。当点击通知div 时,我想先跟随a 标记(哈希始终指向 Meteor 路由,使用 Iron Router),然后再执行附加到 div 的点击事件。由于自网景时代以来不存在反向传播,我想也许点击事件可以在路由更改时将函数存储为回调?有没有人试图做类似的事情?在 Iron Router 文档中找不到任何关于它的内容。我目前正在使用一些 Session 变量来缓解这个问题,但想清理它。

【问题讨论】:

  • 所以它应该:第一次解决 pathTo,然后第二次显示气泡通知?这个气泡通知是怎么命名的?
  • 仅供参考,a 元素内的 div 元素不是有效的 HTML(内联元素内不允许有块元素)。
  • 爱德华多,是的!通知是通过一个简单的事件映射'click .notification' Peppe 调用的,这就是 HTML4 :-P。从技术上讲,我知道你是对的,但在 HTML 规范的这个阶段,任何标签都只是语义问题......如果有帮助,我们可以假装它是一个带有自己的事件映射的 div

标签: meteor iron-router


【解决方案1】:

没有看到您的代码当前正在做什么(或者甚至更好,一个简化的示例),我猜测您正在尝试做什么。也许你有这样的事情:

<a href="/yourroute"><div id="bubblething">Click Me!</div></a>

点击事件:

'click #bubblething': function() {
    // Do the bubble thing.
}

但问题是您想在路由后触发点击事件,但点击发生在早期。是否可以将其更改为更像这样的内容:

<div id="bubblething">Click Me!</div> //no <a> tag.

点击事件首先处理实际路由,然后继续:

'click #bubblething': function(){
    Router.go('/yourroute'); // First you route
    { ... } // Code to handle the notification bubble.
}

由于缺少 am &lt;a&gt; 标签,您可能需要稍微更新一下样式,但这应该很简单。路由由点击处理,然后发生其他事情。您可以对其进行参数化,以便调用类并注入路由而不是调用 id。

【讨论】:

  • 我喜欢。唯一的区别是在我的应用程序中,您可以单击a 而无需单击通知,因此我必须为外部和内部事件映射复制Router.go。不过,不是破坏交易!实施后我会回来并投票。谢谢!
  • 需要这个div吗?对返回 false 的锚点的 onclick 应该会阻止浏览器导航到 href。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多