2016-05-24 19 views
2

Ich möchte d3 Diagramme auf dem Server rendern. Ich hatte 3 Optionen: Knoten, Phantom und Nashorn.Laufende jsdom in Nashorn

Ich bevorzuge Nashorn, weil meine API ist Scala Play und ich möchte nicht einen anderen Prozess verwalten. (Bereitstellung, Laden, Warteschlange usw.)

Jetzt muss ich JSDom in Nashorn arbeiten, damit D3 etwas zu rendern haben wird.

Das funktioniert so weit, aber ich kann nicht herausfinden, wie jsdom

class Application @Inject() (val messagesApi: MessagesApi) extends api.ApiController { 

    def test = ApiAction { implicit request => 
    ok("The API is ready") 
    } 

    def pptx = Action { implicit request => 
    val manager: ScriptEngineManager = new ScriptEngineManager 
    val engine: ScriptEngine = manager.getEngineByName("nashorn") 
    engine.eval(new FileReader(Play.getFile("/ext/lodash.js"))) 
    val output = engine.eval("function hello(){return _.join('Hello world nashorn does this thing'.split(' '), '-');} hello();") 
    Ok(output.toString) 
    } 
} 

enter image description here

+0

Welche Probleme sind aufgetreten? jsdom hat viele Abhängigkeiten und diese haben wahrscheinlich auch Deps, also müssen Sie möglicherweise all diese manuell hinzufügen. Ich bin mir nicht sicher, aber ein Tool wie Browserify oder Webpack kann hier helfen (konvertieren Sie ein Modul zu im Grunde eine einzige js) ... – Salem

+0

gut - Erhalt jsdom.js an erster Stelle. Es gibt keinen Download-Link. –

+0

Ich habe eine vierte Option gefunden, typesafehub/webdriver verwendet Rhino und htmlunit. –

Antwort

1

Ich bin Laden eine Gabel von domino in nashorn hinzuzufügen d3 zu laufen. Domino ist eine serverseitige DOM-Implementierung basierend auf Mozillas dom.js. Ich habe es mit r.js von require.js geladen. Sie können die Funktion this readfully verwenden, die von Nashorn fehlt, damit require.js funktioniert.

+0

Ich endete mit Domino und es funktionierte. –

+0

Hey @EricHartford, können Sie Ihre endgültige Lösung teilen? Wie hast du Domino "verlangt"? – shak

+0

Ich benutzte webpack oder browserify, um meine Abhängigkeiten zu packen, dann lud ich die Ausgabe in nashorn. –