我如何对Meteor模板不支持的DOM事件做出反应?

时间:2012-09-23 18:24:06

标签: meteor

目前meteor supports a limited number of events我们可以从模板定义做出反应。我想要一种方法来响应超出此预定义列表的事件。我希望自由地将任何事件(甚至自定义事件)添加到模板中的可能事件列表中。

我的一个想法就是在某个地方设置一个jquery事件处理程序来监听不支持的事件并让它设置一个会话变量:

$(form).submit( ->
    Session.set('formSubmitted', true)

然后在渲染模板时使用该会话变量:

Template.confirmation.submitted = ->
    return Session.get('formSubmitted')
<template name="confirmation">
    {{#if submitted}}
        <!-- do whatever -->
    {{/if}}
</template>

但这只是一种解决方法,并没有真正解决这个问题。有没有一个真正的流星方式这样做?这是我可以使用新的Spark实现吗?

注意:请忽略我在此处使用提交事件的事实。我知道我可以将点击事件绑定到提交按钮,但这不是重点。

注意2: this question的已接受答案也只是一种解决方法。

1 个答案:

答案 0 :(得分:1)

rendered回调是我用来做这件事的。

http://docs.meteor.com/#template_rendered

回调为您提供了模板实例,您应该使用它来查找所需的dom元素:http://docs.meteor.com/#template_inst

下面未经测试的示例;)

Template.foo.rendered = ->
  $(this.find("form")).submit ->
    Session.set 'formSubmitted', true

使用Session变量而不是切换视图我认为是一个品味问题。

我在会话中存储了一个应用状态,可以切换模板。此外,骨干软件包对于提供一些有意义的URL非常有用。