2012-06-23 5 views
22

Ich weiß Meteor macht Ereignisse wie "Klick", für DOM-Element, aber ich frage mich, ob es ein Load-Ereignis, das ausgelöst wird, wenn eine Vorlage oder teilweise geladen ist? Wie würde ich das erreichen?Template-Onload-Ereignis für meteor.js

Danke.

Antwort

42

Für Meteor ab 0.4.0 Vorschau können Sie Template.myTemplate.created verwenden.

In Template.myTemplate.created ist das DOM jedoch nicht bereit.

Wenn Sie das DOM manipulieren müssen, möchten Sie vielleicht Template.myTemplate.rendered stattdessen verwenden und einen Booleschen Wert verwenden den Status innerhalb des Template-Objekt wie folgt verfolgen:

Template.myTemplate.rendered = function() { 
    if(!this._rendered) { 
     this._rendered = true; 
     console.log('Template onLoad'); 
    } 
} 
+3

'Template.myTemplate.rendered' ist seit Meteor 1.0.4 veraltet. Obwohl es aus Gründen der Abwärtskompatibilität weiterhin unterstützt wird, sollten Sie 'Template.myTemplate.onRendered' für neuere Versionen verwenden. [Quelle] (https://github.com/meteor/meteor/blob/devel/History.md#blaze-2) – Iwazaru

11

Folgendes sollte funktionieren.
Meteor.defer wird aufgerufen, sobald Vorlage zu DOM hinzugefügt und gerendert wird.

<template name="temp"> 
    //regular stuff 
    {{invokeAfterLoad}} 
</template> 

Template.temp.invokeAfterLoad = function() { 
    Meteor.defer(function() { 
    $('mydiv').jquerify(); 
    }); 
    return ""; 
}; 
+1

Sehr cleveren Trick! Danke, @Nachiket. – Gezim

+3

Ab Version 1.1.2 ist dieses Muster veraltet. Verwenden Sie stattdessen "Template.temp.helpers (...)". – 10basetom

4

ich dies eher als die akzeptierte Antwort würde empfehlen, etwas weniger grob IMHO:

<template name="temp"> 
    {{aReactiveHelper}} 
</template> 

Template.temp.aReactiveHelper = function() { 
    var someValue = Session.get('someValue'); 
    invokeAfterLoad(); 
    return someValue; 
}; 

var invokeAfterLoad = function() { 
    Meteor.defer(function() { 
    $('mydiv').doSomething(); 
    }); 
}; 

Die Annahme ist, dass Sie etwas, nachdem die Vorlage Lasten aufrufen wollen, weil es zu einem reaktiven Objekt reagieren ist .

Der Vorteil hier ist, dass Sie Ihrer Vorlage keinen Animationscode hinzufügen.

+1

Dies ist praktisch die gleiche Antwort ein Nachikets – Octopus