2015-02-26 16 views
12

Wie kann ich ein Ereignis erstellen, das auf einer beliebigen Seite ausgeführt wird?Meteor, wie man ein globales Ereignis erstellt?

Beim Erstellen eines Helfers auf der Hauptlayoutvorlage funktioniert es nicht.

Template.layout.events 
    'click': -> 
    console.log "you clicked on the site" 

Antwort

15

können Sie Template.body.events anstelle von Template.layout.events Ereignisse für jede Vorlage erstellen, die auf irgendetwas in <body>

Docs gelten: http://docs.meteor.com/#/full/template_body

+1

Für alle Leser, beachten Sie, dass 'Template.layout.events' arbeitete für mich, während' Template.body.events' nicht funktioniert, so dass Ihre Laufleistung variieren kann. – Godsmith

+2

Diese Antwort ist falsch. Checkout mein one – Dude

+0

Diese Antwort ist wong –

5

Sie ein spezielles Paket benötigen ein globales Ereignis zu erstellen.

installieren

meteor add gwendall:body-events 

und Sie die Ereignisse aus Template.body.events in jedem Template

Beispiel

Template.body.events({ 
    'click .myClass':function(){ 
     alert("BODY EVENT"); 
    } 
}); 

oder wenn Sie

Template.body.events({ 
    'click .myClass'(){ 
     alert("BODY EVENT"); 
    } 
}); 
+0

Es sollte beachtet werden, dass das oben genannte Paket nur erforderlich ist, wenn Iron-Router verwendet, da es Meteor 'Standard-Rendering zu "" bricht oder außer Kraft setzt 'Element. – robertdavid

+0

Bestätigt, dies ist der gleiche Fall mit Flow-Router. – robertdavid

+0

hat für mich gearbeitet :) – janjackson

2
mag die neue Syntax verwenden können

Keine Antwort ist derzeit "falsch" per se, sie funktioniert nur in verschiedenen Situationen:

Ereigniskarten, Template.body.events({}), auf Template.body do not get applied to elements added to the body via Blaze.render, Eisen-Router, Flow-Router jQuery, oder die DOM-API oder an den Körper Element selbst. Wenn Sie die oben Sie verwenden, müssen Sie das Paket hinzufügen body-events Lage sein, die Ereigniskarte auf Körper mit dem Befehl unten zu verwenden:

meteor add gwendall:body-events

Wenn Sie verwenden keine der Vorlage Rendering-Pakete oben Dann können Sie direkt zur Body-Event-Map mit dem folgenden Code hinzufügen:

Template.body.events({ 
    'click': function() { 
    alert("clicked on the page. oh yeah!"); 
    } 
}); 

nb. es scheint die neueste Version von Blaze allows directly adding event maps to body

Verwandte Themen