如何从两个模板处理程序中收听一个事件?

时间:2015-01-31 04:38:38

标签: meteor spacebars

例如,在下面,只调用foo事件处理程序。 (这很奇怪 - 我希望调用bar事件处理程序,因为<form>元素位于bar模板中。)

<template name="foo">
  {{#bar klass="down"}}
    <button type="submit">test</button>
  {{/bar}}
</template>

<template name="bar">
  <form>
    {{> Template.contentBlock}}
  </form>
</template>

Template.foo.events 
  'submit form' ->
    alert 'foo'

Template.bar.events 
  'submit form' ->
    alert 'bar'

2 个答案:

答案 0 :(得分:1)

看一下this包,你只需要声明一个事件处理程序,就可以在你想要的任何模板上使用。

示例来自文档。

   //here we declare 1 only event
    Template.foo.events({
      'click button': function (event, template) {
        console.log("foo button clicked");
      }
    }); 

//here we inherit 
Template.foo2.inheritsEventsFrom("foo"); //where foo2 is another Template, and now have access to the event from foo template
祝你好运

答案 1 :(得分:1)

如何这样做的答案是问题中的代码,其实际上是按照需要工作的。调用bar处理程序,然后调用foo处理程序。

http://meteorpad.com/pad/kLwjq8N7T5fb2qwjA/event%20bubbling