在Meteor中使用Template.myTemplate()时不会触发事件

时间:2013-09-12 01:47:58

标签: google-maps meteor handlebars.js

我正试图抓住谷歌地图InfoWindow中的点击按钮事件。为此,我有以下

<!-- Html file -->
<template name="infoWindowContent">
  <button>Click Me!</button>
</template>

然后我在client.js

上有这个
//Client js file

//Function that renders the template. Gets called from a user's action
function showInfoWindow(map, marker) {
  var infoWindow = new google.maps.InfoWindow();
  //This is the line that generates the template's html
  var infoWindowHtmlContent = Template.infoWindowContent();
  infoWindow.setContent(infoWindowHtmlContent);
  infoWindow.open(map, marker);
}

//Template events
Template.infoWindowContent.events = {
  'click button': function(event){
    console.log('event was triggered', event);
  }
}

infoWindow显示在地图上,它包含按钮,但是当单击按钮时,控制台中不会显示任何日志。这有什么线索吗?如何捕获由使用Template.myTemplate()生成的某个元素调度的事件?

1 个答案:

答案 0 :(得分:0)

函数Template.template()返回普通的html字符串。它没有启用任何Meteor属性。你需要的是一个注入了适当行为的DOM元素。

...
var node = Meteor.render(Template.infoWindowContent());
outerElement.appendChild(node);
...

我不确定如何在谷歌地图api中使用DOM节点,但如果可能的话,它应该很容易。


另外,使用正确的事件表格,从长远来看可以省去很多麻烦:

Template.infoWindowContent.events({
  ...
});