2014-06-11 97 views
1

我非常新的流星......什麼是最好的做法,處理像拖放事件,點擊等流星火焰什麼是最佳實踐?流星.events VS jQuery的

我知道有兩個主要途徑:

1 )在您使用的東西,像Template..events「點擊」,在Template..rendered「滴」等

Template.someTemplate.events({ 

    'click .some-button': function (e) { 
     e.preventDefault(); 
     e.stopPropagation(); 
     console.log("clicked"); 
    }, 

}); 

2),您只需使用$(一些選擇器)。單擊(.. .. $(something).droppable etc等

Template.resourcePage.rendered = function(){ 
    this.$('.some-button').click(function (e) { 
     e.preventDefault(); 

     console.log("clicked");  

    }); 
} 

對我來說,這是同樣的事情,我想呢?這只是一個簡單的例子,同樣的事情適用於drop(droppable())等其他事件。 'drop'沒有看到支持的Meteor事件的正式列表......所以這意味着我應該使用#2方法。

什麼是陷阱?任何解決方法?

歡呼

+0

你的意思'Template.resourcePage.onRendered(函數(){'.. –

回答

2

流星目前支持在其eventmaps以下事件:單擊,DBLCLICK,焦點,模糊,改變了mouseenter,鼠標離開,鼠標按下,鼠標鬆開,的keydown,按鍵,KEYUP(你選擇1)

來源:http://docs.meteor.com/#eventmaps

如果你想要其他事件,那麼對他們來說最好的地方確實是渲染事件(你的選項2)。爲按鈕提供自己的模板極大地提高了可讀性,測試和可能的性能。

1

您可能會發現在the Blaze wiki一些有趣的信息(向下滾動到活動使用jQuery)。除此之外,事件在.js文件中定義,而不是在實際的模板(HTML文件)中定義。如果必須,請將jQuery保留在HTML文件之外並嘗試使用模板助手。 簡單地說,對於一個點擊事件的元素#鍵在一個名爲MyView的,這將是代碼(最佳實踐)模板:

Template.myView.events = { 
    'click #button' : function (event) { 
    console.log("The button was clicked"); 
    } 
} 

這意味着你定義哪些事件變量Template.myView.events內發生。對於同一個模板,可以有多個事件。你會發現要使用的事件類型in the Meteor documentation。你可以在你的js文件和Template..events變量中使用任何jQuery代碼。

+0

感謝您的快速回應,我本來應該更清楚我的問題。 。我沒有在HTML中放入jQuery,所有這些都在JS文件中。看起來我提到的兩種方法很相似但略有不同。例如.events方法中的:drop似乎具有(事件)Meteor參數...在jQuery .droppable()語句中的'drop'裏有(event,ui)作爲參數,你可以做一些事情,比如讓它們被放到droppable(例如ui.draggable.clone)上,但是我不能在流星「事件」參數中找到這個。 – aginsburg

3

Meteor的當前版本支持自定義事件(儘管它不在文檔中)。現在我使用它,它工作正常,就像這樣:

Template.myTemplate.events({ 
    'customEvent #button': function(event, template) { 
    // can be called with $("#button").trigger('customEvent', {some_data: 'some data'}); 
    // You can also access data, e.g. 'some data' is accessible at event.some_data 
    console.log("clicked!"); 
    } 
});