2013-05-14 15 views
32

Voglio creare un'applicazione in Meteor, da quello che ho capito il manuale che carica per primo, che sono nelle sottodirectory e quindi segue l'ordine alfabetico. La mia struttura dei file è come questo ...chiamate da file separati con Meteor

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

Risulta quindi che la funzione di errore "makeBoard()" non esiste, funziona solo se dichiaro nello stesso file in cui voglio chiamarlo. Anche quando sposto il file "game.js" nella stessa directory dove "template.js", succede. Come dovrei fare correttamente riferimento a risorse che sono in file differenti su Meteor?

risposta

46

Definire la funzione con makeBoard = function() { ... }.

Le funzioni definite con function foo() { ... } sono locali al file, come le variabili definite con var bar = ....

+0

Risolto il problema, grazie. – Andy

+0

Con la versione EMCA6 e in particolare il tag "use strict" per codice javascript questa soluzione non viene compilata. Suggerisco caldamente la soluzione @Shwaydogg per questo motivo. – nchinda2

+0

Questo funziona solo per CLIENT SIDE. Vedere la risposta di Shwaydogg per una correzione lato SERVER usando Meteor.MyFunction.Method() – Andy

52

L'utilizzo di una variabile definita globalmente, come suggerito da avital, funzionerà, ma non è una scelta di progettazione di codice consigliata().

Invece nella directory lib è possibile creare un file con:

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

Poi, nel file di qualsiasi altro js si potrebbe chiamare Meteor.myFunctions.makeBoard(). Questo dovrebbe essere fatto nella directory lib perché Meteor garantisce che i file js in lib siano caricati prima di altre directory, quindi la tua funzione sarà già caricata.

+3

Molto intelligente. Se si condividono le funzioni da più file ciò renderà possibile: Meteor ['myFunctions'] = Meteor ['myFunctions'] || {}; Meteor ['myFunctions'] ['createinstanceclass'] = function() { return new instanceclass(); } Meteor ['myFunctions'] = Meteor ['myFunctions'] || {}; Meteor ['myFunctions'] ['createsolutionclass'] = function() { return new solutionClass(); } Se siete d'accordo, aggiungetelo alla vostra risposta; se no, per favore, spiega come farlo meglio :) –

+0

GRAZIE. Finalmente ho ottenuto alcuni codici lato server personalizzati in esecuzione. Ho provato a farlo sul client, e NON ha funzionato, come previsto. Fantastico. – Andy

+0

grazie, aiuto – jremi

Problemi correlati