ReferenceError ошибка узла. Метеор - это каркас на вершине Узла.
Узел имеет глобальную область действия (переменная global
). Эта ошибка вызывается Node (not Meteor), если вы пытаетесь получить доступ к неопределенной глобальной переменной.
Браузеры также имеют глобальную область действия, называемую window
, и не бросают ReferenceErrors при доступе к неопределенным переменным.
Вот образец, который я хотел для добавления функциональности к классу (это очень Метеор):
/lib/Helpers.js <-- Helpers for everyone (node+browser)
/server/Helpers.js <-- Server helpers (node)
/client/Helpers.js <-- Client helpers (browser)
Рассмотрим эти реализации:
// /lib/Helpers.js
Helpers = {/* functions */}; // Assigned to window.Helpers and global.Helpers
// /server/Helpers.js
Helpers = _.extend(Helpers, {/*more functions*/}
// /client/Helpers.js
Helpers = _.extend(Helpers, {/*more functions*/}
Это тривиальный пример.Что, если я не хочу беспокоиться о порядке загрузки? Почему не _.extend() в /lib/Helpers.js?
// /lib/Helpers.js
// Helpers = {/* functions */}; // Overwrites...
Helpers = _.extend(Helpers, {/* functions */}); // ReferenceError
Потому что вы получите ReferenceError от узла, если Помощники не определены - в частности, «Помощники», используемые в качестве аргумента. (Узел знает, как назначить помощников как global.Helpers).
Вот два способа "исправить" это:
1) Присвоить хелперов к чему-то
// /lib/Helpers.js
// Helpers = Helpers || {} // would be another ReferenceError
if (typeof Helpers === 'undefined') Helpers = {};
Helpers = _.extend(Helpers, {/* functions */});
2) Использование помощников из глобального
// /lib/Helpers.js
Helpers = _.extend(global.Helpers, {/* functions */}); // works in node, but...
Оба которые сосут.
1) Синтаксис является ужасным.
2) работает в узле, но глобальных браузеров нет. Так что это не так.
Итак, я сдался и вернулся, чтобы перезаписать его в первый раз в lib и искать ошибки времени выполнения, если что-то было перезаписано.
Если у вас есть удобный кросс-браузерный синтаксис для этого, сделайте комментарий :-) var something = something || {} something.blah = foo;
Вот некоторые другие JS shorthand tips.
является 'Schemas' глобальной переменной? загружаете ли вы его с помощью 'require'? возможно, вам нужно показать нам больше кода, потому что, поскольку код написан, не должно быть проблем –
Возможный дубликат [Как я могу получить доступ к константам в файле lib/constants.js в Meteor?] (http://stackoverflow.com/ Вопросы/26836390/how-can-i-access-constants-in-the-lib-constants-js-file-in-meteor) –