2012-09-23 66 views
2

目前流星supports a limited number of events,我們可以從我們的模板定義中作出反應。我想要一種方式來應對超出此預定義列表的事件。我想要自由地將任何事件,甚至自定義事件添加到模板中可能事件的列表中。我如何對流星模板不支持的DOM事件做出反應?

我有一個想法會在某處建立一個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

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 

使用會話變量,而不是開關這個觀點是我認爲的品味問題。

我有一個應用程序狀態存儲在會話中,切換模板。此外,骨幹套餐對於提供一些有意義的網址非常有用。

+1

一個問題是,每當模板呈現時都會綁定事件,這會在任何依賴關係發生變化時發生。 –

+0

我一直都有這個問題Dave,你知道任何避免這種情況的模式嗎? –