我使用meteor 1.3,我不得不整合一个"网络模板"进入我的流星应用程序,这个" web模板"有一个custom.js文件包含j个查询事件,但在整合" web模板"之后,js文件中的那些事件只运行一次,有没有办法解决这个问题,这个js文件包含了很多将事件移入我的"流星模板事件"将是非常复杂的。 感谢
答案 0 :(得分:1)
问题是事件直接与模板内的DOM元素有关,当流星改变DOM元素时,绑定就会丢失。
您需要做的是使用委派事件,即使用jquery .on()完成。
您需要做的是处理固定DOM元素中的事件,即“更改HTML”父级。当一个事件发生在这个元素内部时,事件会“起泡”到处理它的固定DOM元素。该事件包含有关启动它的DOM元素的信息,因此on订阅可以调用正确的处理程序。
请注意$('#fixedElement').on(event, selector, handler)
指定:
因此,您可以使用哪个处理程序指定要处理哪个元素的事件。这将在meteor修改DOM之后发挥作用。
例如,如果你有这个:
$('#btnOk').click(function() { alert('Clicked OK!`); });
您必须将其更改为:
$('#container').on('click', '#btnOk', function() { alert('Clicked OK!`); });
这样,只要具有Id'#btnOk'的DOM元素位于'#cotnainer'内,处理程序就会被执行,无论对象是手动还是动态创建。
当然,您必须确保#container
元素存在,并且不会被任何其他元素替换。要做到这一点,也许你必须遍历DOM树,例如使用jQuery .parent()
。