2013-04-19 10 views
9

avevo /clients/client.js, /server/server.js e /model.jsMeteorJS e CoffeeScript

In model.js ho avuto: "Elenchi = new Meteor.Collection (" liste "); Nel client/server avevo usato questa collezione. Tutto funziona bene.

Dopo aver aggiunto CoffeeScript. ho dovuto convertire tutti i miei js (3) file in .coffee. Rimuovere i file js e iniziare meteora. Ma ora ho ottenuto:

Uncaught ReferenceError: liste non è definita

Perché? Dov'è l'errore?

liste = new Meteor.Collection "liste"

Grazie

+2

Questa è solo una supposizione, ma nella versione JavaScript ti mancava il 'var' di proposito? In caso contrario, CoffeeScript lo inserirà automaticamente, oltre a racchiudere l'ambito, quindi quello che era un global non sarà più. – phenomnomnominal

+1

Sì @phenomnomnominal dovrebbe avere ragione è necessario usare un '@' davanti alle variabili in coffeescript se si desidera accedervi da altri file – Akshat

+0

Non proprio sicuro di cosa sia @Akshat, @ aggiunge 'this' davanti di una variabile. Se vuoi rendere globale una variabile, di solito fai qualcosa come 'root = this? exports' e quindi 'root.Lists = Lists'. – phenomnomnominal

risposta

1

Con CoffeeScript, se si desidera accedere la variabile/funzione in un altro file, è necessario esporre la variabile

Dalla docs meteore

Global variables can be set in CoffeeScript by using this (or CoffeeScript's @ shorthand), because at the top level this refers to the global namespace (window on the client and global on the server). Thus

@myFunction = -> 123 at the top level sets the global variable myFunction.

Così globalizzare la vostra lista:

@Lists = new Meteor.Collection "lists"; 

Affinché questo all'interno model.js si può accedere da altri file (diventa globale)

12

Vedi http://docs.meteor.com/#coffeescript su come utilizzare @ come un modo conveniente per definire le variabili globali da CoffeeScript all'interno dell'ambiente Meteor. Come @Akshat menzionato nei commenti, Meteor imposta this al livello più alto nell'ambiente globale per semplificare questo compito.

+1

Questo è ancora il metodo raccomandato? Ho notato che la documentazione sul link fornito non menziona più l'uso di '@'. – cloudrave

+1

Vedere [questo problema meteorologico] (https://github.com/meteor/meteor/issues/3091) –