Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor:将模板外的事件与模板内的事件处理程序绑定_Javascript_Events_Meteor - Fatal编程技术网

Javascript Meteor:将模板外的事件与模板内的事件处理程序绑定

Javascript Meteor:将模板外的事件与模板内的事件处理程序绑定,javascript,events,meteor,Javascript,Events,Meteor,我试图从模板MyTemplate中捕获窗口中的任何单击事件,如下所示: Template.MyTemplate.events({ 'click' : function(e) { console.log("click"); // Here I need to access Template.instance() // ... } }); 但是上面的代码不能像我所希望的那样工作,但是只捕获模板DOM内部的点击,而我无法获取模板外部的点击 另外,我希望将代码放在模板本

我试图从模板
MyTemplate
中捕获窗口中的任何单击事件,如下所示:

Template.MyTemplate.events({
  'click' : function(e) {
    console.log("click");
    // Here I need to access Template.instance()
    // ...
  }
});
但是上面的代码不能像我所希望的那样工作,但是只捕获模板DOM内部的点击,而我无法获取模板外部的点击

另外,我希望将代码放在模板本身内部,因此像
template.body.events({…})
之类的内容不是一个选项


我尝试的

我已经试过了:

它可以工作,但似乎是一种解决方法:我在
Template.MyTemplate.events({…})
中包含所有事件,而这些事件在外部,我需要进行绑定以获取模板的实例,它使用JQuery绑定事件,而不是Meteor本身


那么,有没有更简单的方法/流星方法?像一些可以进入
Template.MyTemplate.events({…})

的代码,我认为从meteor绑定到body时仍然存在一些错误,这有帮助吗?我不认为这是可能的,我也不认为你提到的解决方案是一种变通办法。我认为你想把这些事件“放在”模板中的想法有点误导。事件显然不在模板内,否则会被捕获,因此您只是试图保持代码干净并保留数据上下文(这是
绑定
完成的)。将整个页面包装在模板中并附加事件如何?
function clickEvent(event) {
  console.log('click');
  // Here I can access the right `Template.instance()` as `this`
  // thanks to the bind below
  // ...
}

Template.MyTemplate.onCreated(function () {
  // The `bind` give me the template instance inside the `clickEvent`
  // function
  $(document).on('click', clickEvent.bind(this));
});

Template.MyTemplate.onDestroyed(function () {
  $(document).off('click', clickEvent);
});