2013-08-09 13 views
8

Jestem nowy w meteor i coffeescript. Korzystam z układu plików sugerowanego w FAQ nieoficjalnych meteorów. W zbiorach plików/C.coffee mamW meteorrze 0.6.4.1/coffeescript, jak działa zmienna widoczność?

C = new Meteor.Collection 'C' 
console.log "C: #{C}" 

w pliku serwera/main.coffee mam

C.insert {test: 'test'} 

Kiedy zacznę meteor, widzę na konsoli:

C: [object Object] 
ReferenceError: C is not defined 
    at app/server/main.coffee.js:5:1 
    at /home/xxx/yyy/.meteor/local/build/server/server.js:298:12 

Jak zrobić C dostępnym w plikach poza kolekcjami/C.coffee?

Aktualizacja: dodanie @ do C rozwiązuje problem na najwyższym poziomie. Jednak to jeszcze nie powiedzie się z:

Meteor.methods 
     test: (statement) -> 
      @C.insert {test: 'test'} 

To nie powiedzie się z powodu błędu TypeError: Cannot call method 'insert' of undefined

+0

http://stackoverflow.com/questions/15831144/global-classes-with-meteor-0-6-0-and-coffeescript trzeba użyć @ przed C – Suburbio

+0

Dzięki, Subrubio. Wszelkie sugestie dotyczące mojego zaktualizowanego przykładu? – Jerry

+0

Musisz tylko użyć @/this podczas ustawiania zmiennej globalnej. – Suburbio

Odpowiedz

13

Aby C widoczna poza plikiem został zdefiniowany w użyciu @, który kompiluje do this. lub window. w JS, co daje mu Ten sam efekt w postaci zasięgu globalnym:

@C = new Meteor.Collection 'C' 
+0

Dzięki. Próbowałem raz, a to się nie udało, więc pomyślałem, że to było złe. Teraz działa na najwyższym poziomie. Ale próbuję również użyć C w wywołaniu Meteor.methods. Czy istnieje wyrównanie do okna? po stronie serwera? – Jerry

+0

Po stronie serwera myślę, że zrobiłoby to "zamiast", ponieważ nie ma okna na serwerze – Akshat

+0

Zobacz mój zaktualizowany przykład. @ Wewnątrz testu() wskazuje na coś innego. – Jerry

Powiązane problemy