Verbinden mit ClojureScript bREPL: clojure.browser.repl / connect löst TypeError in kompiliertem JavaScript aus

8

Ich versuche, eine Verbindung zu einem ClojureScript-Browser-REPL herzustellen, und ich habe Probleme mit clojure.browser.repl/connect . In meinem kompilierten JavaScript wird TypeError versucht, appendChild für ein null -Objekt im oberen Block des Google Closure-Codes aufzurufen. Ich folge den Anweisungen in ClojureScript: Auf und läuft (Kapitel 9, p .78, in der Vorschau verfügbar) und fragen sich, ob sich die Werkzeuge dafür seit der Veröffentlichung geändert haben.

Ich verwende Leiningen 2.0.0, Java 1.6.0_37, OS X 10.7.5 und die Abhängigkeiten in meinem project.clj :

%Vor%

Hier ist die einzige ClojureScript-Quelldatei, src/cljs/brepl_hello/brepl-hello.cljs :

%Vor%

Dies kompiliert zu der Datei resources/public/brepl-hello.js , die ich in index.html in dasselbe Verzeichnis eingefügt habe:

%Vor%

Ich habe dies auf Port 3000 mit Ring / Jetty von der REPL oder Python SimpleHTTPServer serviert. Wenn ich diese Seite in Chrome öffne, zeigt die Dev-Konsole Uncaught TypeError: Cannot call method 'appendChild' of null mit einer Rückverfolgung zu diesem if / else -Block im Google Closure-Code am Anfang der entsprechenden js-Datei an, wobei parentElm (übergeben in zu der enthaltenden Funktion als Parameter) ist null .

%Vor%

Dies scheint ein Problem mit clojure.browser.repl/connect zu sein. Tausche diese Zeile in der ClojureScript-Quelle aus für etwas wie:

%Vor%

Kompiliert und läuft im Browser ganz gut. Ich vermute, dass in meinen Build-Einstellungen oder in der Verzeichnisstruktur etwas falsch konfiguriert ist, oder ich mache irgendwo einen Fehler, der nichts Neues ist. Was hat sich seit der Veröffentlichung der Anweisungen, die ich befolge, geändert? Ich habe in den #clojure irc logs einige Verweise auf dieses Problem gefunden, aber keine Lösung.

Schließlich ist hier ein abgekürzter Verzeichnisbaum als Referenz:

%Vor%     
ecmendenhall 27.01.2013, 20:41
quelle

2 Antworten

6

Nun, es ist Open Source und schaut sich den Code an. Es scheint, dass document.body zu dem Zeitpunkt Null ist, zu dem der versteckte iframe hinzugefügt wurde (der Aufruf connect führt zu diesem Punkt).

Sie sollten dies connect call auf dom ready oder body on load tun und es sollte gut funktionieren.

    
Ankur 28.01.2013, 13:32
quelle
2

Sehen Sie sich an:

Ссылка

oder, für eine bessere Erfahrung, hier

Ссылка

    
Magomimmo 13.09.2013 15:37
quelle