ReferenceError ist ein Knoten Fehler erstellen möchten. Meteor ist ein Framework auf dem Knoten.
Knoten hat einen globalen Geltungsbereich (alias Node global
Variable). Dieser Fehler wird von Node (nicht Meteor) ausgelöst, wenn Sie versuchen, auf eine undefinierte globale Variable zuzugreifen.
Browser haben auch einen globalen Bereich namens window
und werfen keine ReferenceErrors, wenn auf undefinierte Variablen zugegriffen wird.
Hier ist ein Muster Ich mag Funktionalität zu einer Klasse für das Hinzufügen (es ist sehr Meteor):
/lib/Helpers.js <-- Helpers for everyone (node+browser)
/server/Helpers.js <-- Server helpers (node)
/client/Helpers.js <-- Client helpers (browser)
diese Implementierungen Bedenken Sie:
// /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*/}
Dies ist ein triviales Beispiel ist.Was ist, wenn ich mich nicht um die Ladereihenfolge kümmern möchte? Warum nicht _.extend() in /lib/Helpers.js?
// /lib/Helpers.js
// Helpers = {/* functions */}; // Overwrites...
Helpers = _.extend(Helpers, {/* functions */}); // ReferenceError
Da Sie eine Reference von Knoten erhalten, wenn Helfer nicht definiert ist - speziell die „Helfer“ als Argument verwendet. (Der Knoten kann Helfer als global.Helpers zuweisen).
Hier sind zwei Möglichkeiten zu "reparieren" auswählen:
1) zuordnen Helfer etwas
// /lib/Helpers.js
// Helpers = Helpers || {} // would be another ReferenceError
if (typeof Helpers === 'undefined') Helpers = {};
Helpers = _.extend(Helpers, {/* functions */});
2) Verwenden Helfer aus der globalen
// /lib/Helpers.js
Helpers = _.extend(global.Helpers, {/* functions */}); // works in node, but...
Beide welche saugen.
1) Die Syntax ist schrecklich.
2) funktioniert in Knoten, aber es gibt keine globalen in Browsern. So versagt es seinen Zweck.
Also gab ich auf und ging wieder zu überschreiben es das erste Mal in lib, und auf der Suche nach Laufzeitfehlern, wenn etwas überschrieben wurde.
Wenn Sie eine handliche Cross-Browser-Syntax dafür haben, kommentieren Sie :-) var etwas = etwas || {} something.blah = foo;
Hier sind einige andere JS shorthand tips.
ist 'Schemas' eine globale Variable? Laden Sie es mit 'require'? Vielleicht müssen Sie uns mehr Code zeigen, denn da der Code geschrieben ist, sollte es keine Probleme geben –
mögliche Duplikate von [Wie kann ich auf Konstanten in der Datei lib/constants.js in Meteor zugreifen?] (http://stackoverflow.com/ Fragen/26836390/how-can-i-Zugriff-Konstanten-in-der-Lib-Konstanten-js-Datei-in-Meteor) –