2013-04-19 24 views
9

miałem /clients/client.js, /server/server.js i /model.jsMeteorJS i coffeescript

W model.js miałem: "list = new Meteor.Collection (" list "); W klient/serwer używałem tej kolekcji. Wszystko działa bez zarzutu.

Po dodaniu coffeescript. miałem przekonwertować wszystkie moje js (3) pliki do .coffee. Usuń pliki js i rozpoczęcie meteor. Ale teraz mam dostał:

Niepowodzenie ReferenceError: Listy nie są zdefiniowane

Dlaczego? Gdzie jest błąd?

Listy = new „Listy” Meteor.Collection

Dzięki

+2

To tylko przypuszczenie, ale w wersji JavaScript brakowało 'var' celowo? Jeśli nie, CoffeeScript umieści to automatycznie, a także zawinie zakres, więc to, co kiedyś było globalne, już nie będzie. – phenomnomnominal

+1

Tak @phenomnomnominal powinieneś mieć rację, musisz użyć '@' przed swoimi zmiennymi w coffeescript, jeśli chcesz uzyskać do nich dostęp z innych plików – Akshat

+0

Nie do końca wiesz, o czym jest @Akshat, @ dodaje "to" z przodu zmiennej. Jeśli chcesz wprowadzić zmienną globalną, zwykle robisz coś takiego jak "root = this? export', a następnie 'root.Lists = Lists'. – phenomnomnominal

Odpowiedz

1

Z coffeescript, jeśli chcesz uzyskać dostęp do zmiennych/funkcji w innym pliku, trzeba wystawiać zmiennej

od meteor docs

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.

Więc globalizacji listy:

@Lists = new Meteor.Collection "lists"; 

Tak, że to wewnątrz model.js można uzyskać przez innych plików (staje się globalna)

12

Zobacz http://docs.meteor.com/#coffeescript temat korzystania @ jako wygodny sposób definiowania zmiennych globalnych z coffeescript wewnątrz środowiska Meteor. Jak wspomniano w komentarzach, Meteor ustawia this na najwyższym poziomie w środowisku globalnym, aby było to łatwe.

+1

Czy to nadal jest zalecana metoda? Zauważyłem, że dokumentacja pod podanym linkiem nie wspomina już o używaniu '@'. – cloudrave

+1

Zobacz [ten problem z meteorem] (https://github.com/meteor/meteor/issues/3091) –