Warum kann ich jetzt nicht alle Taschen erweitern?

9

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?

    
pimvdb 04.12.2011, 19:05
quelle

1 Antwort

0

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:

  • Laden Sie das kompilierte Modul herunter
  • Extrahieren Sie den Ordner in den Ordner node_modules und benennen Sie ihn in now um.
  • Führen Sie Node nicht mit dem Proxy-Flag
  • aus

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 .

    
pimvdb 10.01.2012, 14:22
quelle