如何在MeteorJS中检测整个文档的事件?

4

就是这么简单。我目前在我的模板中有事件,但它并没有起作用:

 'keyup': function(event) {
    event.preventDefault();
    console.log("KEYUP");
}

更新:看来这是框架中的通用错误。如果有人能分享我可以使用的手动修复方法而不涉及使用他人的软件包,我将不胜感激。

更新2:我已经解决了这个问题,如下所示。

3个回答

4

很遗憾,Meteor(源代码)存在一个错误,即事件不会在UI.body.template上触发。您可以使用meteor-body-events包来修复这个问题,并在整个文档上附加keyup事件。


我很震惊一个JavaScript框架缺乏如此基本的功能。在这种情况下,我将修改问题以寻求手动解决方案。我不想使用另一个包,但如果我妥协了,我会接受你的答案。谢谢! - FullStack
你也可以尝试使用Jquery或重新思考你的方法。 - Adam Wolski
我该如何使用JQuery实现它?我应该把代码放在哪里?感谢您的帮助! - FullStack
请尝试使用Template.tpl.created = function() {$(window).on('keyup', function(){});};。 - Adam Wolski
1
谢谢你的提示,我的朋友。我已经使用我的原始方法让它工作了。请看答案 :) - FullStack

2

突然间我的原始代码可以正常运行了。可能Meteor的工程师已经修复了这个问题,太棒了!

以下是在0.9.3.1版本中对我有效的代码:

Template.template_name_here.events({
  'keyup': function(event) {
    event.preventDefault();
    console.log("KEYUP");
  }
});

Meteor甚至可以使用单个处理程序处理多个事件,例如:
Template.template_name_here.events({
  'keyup, click': function(event) {
    event.preventDefault();
    console.log("KEYUP OR CLICK");
  }
});
太棒了!

0

目前Meteor正在正确处理<body>事件,除非您使用的是接管模板渲染的渲染器。一个例子是Kadira:blaze-templates,它将覆盖默认的Meteor模板渲染(用于FlowRouter),或者Iron Router

幸运的是,有一个简单的包gwendall:body-events可以恢复此功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接