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);
});