2013-04-19 4 views
9

Я была /clients/client.js, /server/server.js и /model.jsMeteorJS и CoffeeScript

В model.js я имел: "Lists = новый Meteor.Collection (" списки "); В клиент/сервер я использовал эту коллекцию. Все работает отлично.

После добавления CoffeeScript. Я была конвертировать все мои JS (3) файлы в .coffee. Удалить JS файлы и начать метеор. Но теперь я получено:

Неоткрытый ReferenceError: Списки не определены

Почему? Где ошибка?

Списки = новые Meteor.Collection «списки»

Благодаря

+2

Это всего лишь догадка, но в версии JavaScript вам не хватало «var»? Если нет, CoffeeScript автоматически поместит это, а также обернет область, поэтому то, что раньше было глобальным, больше не будет. – phenomnomnominal

+1

Да @phenomnomnominal должен быть прав, вам нужно использовать '@' перед вашими переменными в coffeescript, если вы хотите получить к ним доступ из других файлов. – Akshat

+0

Не совсем уверен, что @Akshat находится около, @ добавляет 'this.' впереди переменной. Если вы хотите сделать переменную global, вы обычно делаете что-то вроде 'root = this? export', а затем 'root.Lists = Lists'. – phenomnomnominal

ответ

1

С CoffeeScript, если вы хотите получить доступ к переменной/функции в другом файле, необходимо выставить свою переменную

из метеорные документы

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.

Так глобализовать список:

@Lists = new Meteor.Collection "lists"; 

Так что внутри model.js могут быть доступны другие ваши файлы (становится глобальным)

12

См http://docs.meteor.com/#coffeescript о том, как использовать @ как удобный способ для определения глобальных переменных из CoffeeScript внутри среды Метеор. Как отмечает @Akshat в комментариях, Meteor устанавливает this на верхнем уровне в глобальную среду, чтобы сделать это проще.

+1

Является ли это еще рекомендуемым методом? Я заметил, что документация по предоставленной ссылке больше не упоминает использование '@'. – cloudrave

+1

См. [Эта метеорная проблема] (https://github.com/meteor/meteor/issues/3091) –