Ich versuche Funktionen in jedem pocket
von nowjs bereitzustellen. Das würde ich gerne tun, wenn _.extend
jeden in die Tasche nimmt, also everyone.now
. Aus irgendeinem Grund, den ich nicht verstehen kann, liefert _.extend
die Funktion auf der Client-Seite nicht korrekt.
Dies ist mein aktueller Code:
%Vor% Sowohl auf der Server- als auch auf der Client-Seite kann ich now.foo()
gut machen. Auf der anderen Seite schlägt now.bar()
fehl, weil now.bar
nicht definiert ist. Dies ist sowohl auf der Client- als auch auf der Serverseite der Fall. Ich habe versucht, auf der Server-Seite auf Existenz zu prüfen, wie oben in der letzten Zeile gezeigt. Diese Zeile protokolliert jedoch undefined
.
Die extend
-Funktion von Underscore funktioniert (offensichtlich) bei anderen Objekten, also denke ich, dass es etwas mit dem "magischen Namespace" zu tun hat, der jetzt benutzt wird.
Wie funktioniert die Erweiterung nicht mit everyone.now
und wie kann ich es zum Laufen bringen?
Edit 2: Ich habe mehr in Proxys gegraben. Es scheint, als würde man eine Eigenschaft auf einen Proxy setzen, indem man eine Variable übergibt, da ihr Name nicht funktioniert. Ich habe meine erste Bearbeitung entfernt, weil dieser Testfall enger ist.
Warum funktioniert das nicht? Ist das ein Fehler? (Meistens frage ich das selbst ich weiß es ist nicht, aber das macht mich wirklich ahnungslos ...)
%Vor%Ergebnis protokollieren:
%Vor% Offenbar bewirkt proxy[ key ] = "bar";
nicht, dass set
auf dem Proxy aufgerufen wird. Warum ist das so?
Sie haben einen Blog-Eintrag auf der NowJS-Website zur Verwendung von node-proxy
veröffentlicht Windows anstelle der systemeigenen V8-Implementierung mit dem --harmony_proxies
-Flag.
Es hat den Anschein, dass die V8-Version, die Node derzeit verwendet, mehrere Bugs in Bezug auf Proxies enthält, die das seltsame Verhalten verursachen, wie in der Frage beschrieben. node-proxy
ist jedoch ein Modul, das Proxies (den Kern des "magischen Namensraums" von NowJS) ohne diese Bugs ermöglicht. (Die Fehler sind auch in einer neueren Version von V8 behoben, aber das würde eine benutzerdefinierte Erstellung von Node erfordern.)
Ich konnte einfach nicht herausfinden, wie man node-proxy
unter Windows erstellt (es ist ein .node
Addon; kein reines JavaScript). In dem obigen Blogpost haben sie das kompilierte Modul verteilt, und alles funktioniert jetzt wie ein Zauber.
Um zu beheben:
node_modules
und benennen Sie ihn in now
um.
Bearbeiten: Knoten 0.7.0 verwendet V8 3.8.6, das dieses Problem ebenfalls löst. Führen Sie einfach das --harmony
Flag aus und entfernen Sie den Verweis auf node-proxy
.
Tags und Links javascript node.js underscore.js nowjs ecmascript-harmony