2013-05-14 5 views
32

Ich möchte eine Anwendung in Meteor, von dem, was ich verstehe das Handbuch zuerst lädt, die in Unterverzeichnisse sind, und folgt dann der alphabetischen Reihenfolge. Meine Dateistruktur wie das ist ...Aufruf von Funktionen aus separaten Dateien mit Meteor

/server 
/lib 
/client 
    /lib 
     game.js -> already starts declaring the function "makeBoard(){}" 
    /template.js -> where the function "makeBoard()" is called. 

scheint also, dass die Fehlerfunktion „makeBoard()“ nicht existiert, funktioniert nur, wenn ich in der gleichen Datei zu erklären, wo ich es nennen will. Auch wenn ich die Datei "game.js" in das gleiche Verzeichnis verschiebe, in dem "template.js" liegt, passiert es. Wie sollte ich korrekt auf Ressourcen verweisen, die sich in verschiedenen Dateien auf Meteor befinden?

Antwort

46

Definieren Sie die Funktion mit makeBoard = function() { ... }.

Funktionen, die mit function foo() { ... } definiert sind, sind lokal für die Datei, ebenso wie Variablen, die mit var bar = ... definiert sind.

+0

Mein Problem behoben, danke. – Andy

+0

Mit der EMCA6-Version und speziell dem "Use strict" -Tag für JavaScript-Code kompiliert diese Lösung nicht. Ich empfehle dringend @Shwaydogg Lösung aus diesem Grund. – nchinda2

+0

Dies funktioniert nur CLIENT SIDE. Siehe Shwaydoggs Antwort für einen SERVER-Seitenfix mit Meteor.MyFunction.Method() – Andy

52

Die Verwendung einer global definierten Variable funktioniert, wie es Avital vorschlägt, ist aber keine empfohlene Codeentwurfsauswahl (see JS mistake 1 listed here).

Statt in Ihrem lib Verzeichnis können Sie eine Datei mit erstellen:

Meteor.myFunctions = { 
... 
    makeBoard : function() { ... }, 
... 
} 

Dann in jeder anderen js Datei Meteor.myFunctions.makeBoard() nennen könnte. Dies sollte im Verzeichnis lib erfolgen, da Meteor garantiert, dass die js-Dateien in lib vor anderen Verzeichnissen geladen werden, sodass Ihre Funktion bereits geladen wird.

+3

Sehr clever. Wenn Sie Funktionen aus mehreren Dateien teilen, wird dies Folgendes ermöglichen: Meteor ['myFunctions'] = Meteor ['myFunctions'] || {}; Meteor ['myFunctions'] ['createinstanceklasse'] = function() { return new instanceclass(); } Meteor ['myFunktionen'] = Meteor ['myFunktionen'] || {}; Meteor ['myFunctions'] ['createsolutionclass'] = function() { Rückgabe neuer solutionClass(); } Wenn Sie einverstanden sind, fügen Sie es bitte Ihrer Antwort hinzu; wenn nicht bitte erklären Sie, wie man es besser macht :) –

+0

DANKE. Schließlich wurden einige benutzerdefinierte Server-Seitencodes ausgeführt. Ich habe versucht, dies auf dem Client auszuführen, und es hat nicht funktioniert, wie erwartet. Fantastisch. – Andy

+0

danke, hilft – jremi

Verwandte Themen