2016-08-09 3 views
0

Wie kann ich reaktive Template-Variablen (aus Template.data) in einer anonymen Funktion innerhalb der gerenderten Template-Funktion verwenden? (Ich möchte es reaktiv halten). Meteor - Verwenden von reaktiven Variablen in anonymen Funktionen

Template.templateName.rendered = function() { 
    function testFunction(){ 
     //Log the field 'title' associated with the current template 
     console.log(this.data.title); 
    } 
}); 

Antwort

0

Was für mich gearbeitet wurde einfach mit Autorun() und mit Template.currentData() innerhalb Autorun die Werte greifen():

let title; 

Template.templateName.rendered = function() { 
    this.autorun(function(){ 
     title = Template.currentData().title; 
    }); 

    function testFunction(){ 
     console.log(title); 
    } 
}); 
-1
Template.templateName.onRendered(function(){ 
    console.log(this.data.title); 
}); 
+0

Der Punkt ist für die Variable in der anonymen Funktion * innerhalb * die zur Verfügung steht onRender Funktion – jetlej

0

Nicht sicher genau das, was Sie zu tun versuchen (wie this.data.title Druck, wenn es ändert sich?), Aber Sie sollten:

  1. verwenden ein Reactive variable (add reactive-var Paket, dann erstellen a var myVar = new ReactiveVar()
  2. Wenn nötig, wickeln Sie Ihre Funktion mit Tracker.autorun (oder in einem Template Creation/gerenderten Ereignis).

So könnten Sie haben wie:

Eltern Vorlage HTML:

<template name="parentTemplateName"> 
    {{> templateName title=myReactiveVar}} 
</template> 

Eltern Vorlage JS:

Template.parentTemplateName.helpers({ 
    myReactiveVar: function() { 
    return new ReactiveVar("My Title!"); 
    } 
}); 

Vorlage JS:

Template.templateName.onRendered(function() { 
    // Re-run whenever a ReactiveVar in the function block changes. 
    this.autorun(function() { 
    //Print the field 'title' associated with the current template 
    console.log(getValue(this.data.title)); 
    }); 
}); 

function getValue(variable) { 
    return (variable instanceof ReactiveVar) ? variable.get() : variable; 
} 
+0

Ich versuche, das Titelfeld aus der Template.data in der anonymen Funktion zu verwenden und es reaktiv zu halten. Ich muss es nicht auf der Seite drucken, so dass kein Helfer benötigt wird. Aktualisierung meiner Frage, um dies jetzt klarer zu machen. Vielen Dank! – jetlej

+0

Sie wissen, dass der Datenkontext (d. H. 'Template.data') standardmäßig [nicht reaktiv] (http://docs.meteor.com/api/templates.html#Blaze-TemplateInstance-data) ist. Deshalb habe ich oben gezeigt, dass Sie explizit eine 'ReactiveVar' verwenden müssen. Deshalb habe ich einen Helfer benutzt, aber nur um ihn anzurufen. Sie können Ihren Datenkontext beliebig erstellen. – ghybs

+0

Bitte beachten Sie, dass 'this' in autorun nicht auf Template verweist. Ich musste Template.currentData() verwenden, um die Daten innerhalb von Autorun zu erhalten. – jetlej

Verwandte Themen