2013-12-19 23 views
11

ich eine globale Funktion wie diese registriert haben:globale Funktion für Meteor Vorlage Helfer

Handlebars.registerHelper('dialogBoxOptions', function (callbackFunctionName){ 
    return { 
     callBack: callbackFunctionName 
    }; 
}); 

aber wenn ich versuche, darauf zuzugreifen, wie unten I dialogBoxOptions erhalten wird definiert nicht

Template.myLlist.helpers({ 
    dOpt: dialogBoxOptions('dlgCB') 
}); 

Ich habe versucht, dies als globaler Lenkerhelfer und eine reguläre JavaScript-Funktion, aber das gleiche Ergebnis.

Antwort

20

Sie können nicht Lenker Helfer auf diese Weise gelangt man sie in der Vorlage zugreifen:

<template name="myList"> 
    {{dialogBoxOptions.callback 'something'}} 
</template> 

Wenn Sie es in Ihrem Helfer zugreifen möchten, wie Sie jetzt tun Sie stattdessen eine globale Methode registrieren sollte. Sie dies wie /lib/helpers.js

dialogBoxOptions = function (callbackFunctionName){ 
    return { 
     callBack: callbackFunctionName 
    }; 
} 

auch in einer Datei speichern, könnte, wenn Sie eine globale Vorlage Helfer machen wollen, ist die Syntax jetzt:

Template.registerHelper("dialogBoxOptions", function (param2) { 
    return true; 
}); 
+0

Danke, ich hatte eine globale JavaScript-Funktion versucht, aber ich denke, es war an der falschen Stelle, Putting/Lib scheint den Trick getan zu haben. Eine Anmerkung: Es funktioniert nicht, wenn ich "function dialogBoxOptions (callbackFunctionName)" verwende, ich muss deine Syntax benutzen - warum sollte das sein? –

+3

'Funktion xx()' ist Variable Bereich, so dass es funktioniert aber nur in der Datei ist in definiert, ebenso 'var xx = function()' ist auch auf die Datei beschränkt. Ohne das Schlüsselwort 'var' ist es für alle Dateien sichtbar. '/ lib' wird zuerst geladen, also vielleicht, warum es funktionierte, nachdem Sie es dorthin verschoben haben – Akshat

+0

In diesem Fall, wie würde dialogBoxOptions Zugang zu, sagen wir, eine Sammlung-Abonnement innerhalb der Vorlage-Instanz? – Aaron

13

Es gibt jetzt eine Möglichkeit, den Zugang zu den registrierten zu bekommen globale Helfer.

//Register the helper 
UI.registerHelper("functionName", function (param1, param2) { 
    return true; 
}); 

//Use the helper elsewhere 
var result = UI._globalHelpers('functionName')(param1, param2); 
+2

Wird UI.registerHelper nicht für Template.helpers abgeschrieben? Wie lautet die Syntax für den Zugriff auf Template.helpers in diesem Fall? Vielleicht Template._globalHelpers vielleicht? – Aaron

+7

@Aaron: 'Template.registerHelper' wäre die richtige Methode: http://docs.meteor.com/#/full/template_registerhelper – erb

+0

@erb Ich benutze jetzt die RegisterHelper (s). Danke. :) – Aaron

7

Verwenden Template.registerHelper(name, function)
Als

6

In Meteor in Meteor Documentation gezeigt 1.0+ es wie die Syntax sieht einen globalen Helfer für die Erstellung ist jetzt:

Template.registerHelper('functionName',function(param1,param2){ 
    ... your code here ... 
}) 

es dann überall dort verwenden, auf dem Client mit:

var result = Blaze._globalHelpers.functionName(param1, param2); 

OTOH, das UI-Objekt erscheint nicht in der aktuellen documentation, so dass ich mich frage, ob diese Verwendung gesegnet ist.

Verwandte Themen