我正在尝试从模板MyTemplate
内捕捉窗口内的任何点击事件,如下所示:
Template.MyTemplate.events({
'click' : function(e) {
console.log("click");
// Here I need to access Template.instance()
// ...
}
});
但是上面的代码并不像我想的那样有效,但只捕获模板DOM中的点击,我无法获得模板外的点击。
另外,我想在模板中包含代码,因此Template.body.events({ ... })
之类的内容不是一个选项。
我做了什么
我已经尝试this solution:
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);
});
它有效,但似乎是一种解决方法:我有Template.MyTemplate.events({ ... })
内的所有事件,而这些事件在外面,我需要做一个绑定来获取模板的实例,它使用JQuery绑定事件而不是Meteor本身。
那么,有没有更简单的方法/流星方式呢?像一些代码可以进入Template.MyTemplate.events({ ... })
?