Meteor 或 Iron Router 是不是会干扰锚标记上的 jQuery 事件?

Posted

技术标签:

【中文标题】Meteor 或 Iron Router 是不是会干扰锚标记上的 jQuery 事件?【英文标题】:Does Meteor or Iron Router interfere with jQuery events on anchor tags?Meteor 或 Iron Router 是否会干扰锚标记上的 jQuery 事件? 【发布时间】:2014-06-08 11:27:16 【问题描述】:

我正在使用第三方主题,该主题使用锚标记在单击时切换左侧菜单的可见性。在我开始将我的 html 分段并安装 Iron Router 之前,一切都运行良好。我可能只是忽略了某个地方的错误,还是 Meteor/IronRouter 要求我做一些特定的事情来处理锚标签上的所有 jQuery 事件?我是否需要更改所有 jQuery 事件以了解页面更新(通过on())? 此特定元素没有 href= 属性,我不希望 URL 发生变化。

【问题讨论】:

【参考方案1】:

Iron Router 拦截链接上的点击事件,以便它自己处理它们。这肯定会破坏插件的功能。如果您的主题允许通过另一个元素来处理更改,那么这就是完美的解决方案。可以通过单击按钮甚至 div 来管理切换菜单可见性之类的事情。

如果无法更改切换元素,您需要告诉 Iron Router 不要拦截该特定锚点。详情请见this question。

【讨论】:

当我将锚点更改为按钮或 div 时,我似乎无法获得任何功能。如果默认情况下self.options.linkSelector = 'a[href]',Iron Router 不应该已经忽略了我的锚标签吗?【参考方案2】:

这里的关键词原来是“将我的 HTML 分割成部分”,因为我的问题与 Iron Router 无关。一旦开始将 HTML 放入模板中,就不能依赖写入主题的 jQuery 来了解作为 Meteor 本质的页面更新。例如,我的主题包含以下代码:

$('.menutoggle').click(function()
    // do things
);

这实际上必须更改为使用on() 函数:

$(document).on('click', '.menutoggle', function() 
    // do things
);

或者也许更好,用我的模板注册:

Template.mypartialname.events(
   'click .menutoggle': function() 
        // do things
   
);

【讨论】:

以上是关于Meteor 或 Iron Router 是不是会干扰锚标记上的 jQuery 事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Meteor 模板助手编辑 Iron-Router 中作为参数传递的值?

如何在 Iron Router Meteor 中检查当前路线

使用 Iron Router 在 Meteor 包中包含 HTML 模板

使用 Iron Router 路由到 Meteor autoform 提交的新数据?

在页面转换完成时暂停 Meteor 的 Iron Router 中的路由

Meteor js,iron-router,在服务器端使用 Route.go('...') 进行单元测试不起作用