【问题标题】:How to detect events on entire document in Meteor JS?如何在 Meteor JS 中检测整个文档的事件?
【发布时间】:2014-12-13 20:29:18
【问题描述】:

真的就这么简单。我目前在我的模板事件中,但它不起作用:

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

更新:它似乎是框架中的一个通用错误。如果有人可以分享我可以使用的不涉及使用其他人的软件包的手动技巧,我将不胜感激。

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

【问题讨论】:

    标签: javascript jquery meteor


    【解决方案1】:

    不幸的是,meteor (source) 中存在一个错误,即事件不会在 UI.body.template 上触发。您可以使用包meteor-body-events 对其进行修补,并在整个文档上附加keyup 事件。

    【讨论】:

    • 我很震惊 JavaScript 框架缺少这样的基本功能。在这种情况下,我将修改问题以要求手动破解。我不想使用另一个包,但如果我解决了,我会接受你的回答。谢谢!
    • 您也可以尝试使用 Jquery 或重新思考您的方法
    • 我如何用 JQuery 做到这一点?我应该把代码放在哪里?感谢您的帮助!
    • 尝试使用 Template.tpl.created = function() {$(window).on('keyup', function(){});};
    • 感谢您的提示,我的朋友。我已经用我原来的方法让它工作了。查看答案。 :)
    【解决方案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");
      }
    });
    

    太棒了!

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-07-16
        • 1970-01-01
        • 2017-11-09
        • 2014-11-22
        • 1970-01-01
        • 2016-06-13
        • 2017-11-10
        • 1970-01-01
        • 2022-10-13
        相关资源
        最近更新 更多