2016-12-05 3 views
0

Ich benutze scala.js (v0.6.13) mit der Highcharts-Fassade, und ich habe in eine Straßensperre geraten, versuchen, auf einige Variablen zuzugreifen, die ich normalerweise in Javascript mit 'this' und 'Diagramm'. Hier ein Beispiel:Scala.js referenziert mit dieser

Coffee:

tooltip: { 
    enabled: true, 
    positioner: (labelWidth, labelHeight, point) -> 
    return { x: chart.plotWidth - labelWidth + chart.plotLeft, y: 17 } 
    formatter:() -> 
    x = this.x 
    point = this.points.find (p) -> x == p.x 
    ... 

Meine Frage ist, wie kann ich zugreifen "this.x" und "chart.plotWidth" in meinem Formatierer und Stellungsfunktionen in scala.js? Hier ist mein scala-Code so weit:

override val tooltip: Cfg[Tooltip] = Tooltip(
    formatter = {() => 
    "what?" 
    }: js.Function0[String], 
    positioner = { (labelWidth: Any, labelHeight: Any, point: Object) => 
    js.Dynamic.literal(
     x = labelWidth, 
     y = 17) 
    }: js.Function3[Any, Any, Object, Object] 
) 

bearbeiten: Diagramm gehört zu einem Highchart-Diagramm.

+0

Sie möchten vielleicht darauf hinweisen, dass Ihr Original-Snippet in CoffeeScript anstatt in JavaScript geschrieben ist, so dass Scala.js-Leser, die nicht mit CoffeeScript vertraut sind, nicht völlig verwirrt werden. – sjrd

Antwort

1

Sie müssen einen js.ThisFunctionN verwenden, um den speziellen JavaScript-Code this explizit als normalen Parameter in Scala.js zu erfassen.

positioner = { (thiz: js.Dynamic, labelWidth: Any, labelHeight: Any, point: Object) => 
    // here the variable `thiz` holds what would be `this` in JS 
    ... 
}: js.ThisFunction3[js.Dynamic, Any, Any, Object, Object] 

Wenn eine Scala anonyme Funktion einer js.ThisFunction Umwandeln der this Argument wird als der erste Parameter übergeben.

Weitere Details finden Sie unter https://www.scala-js.org/doc/interoperability/types.html.

Für chart gibt Ihre Frage nicht genügend Kontext, um zu wissen, was chart in Ihrem CoffeeScript-Code ist. Aber ich denke, nur die Verwendung von chart in Scala.js wird tun, was auch immer der ursprüngliche Code tut.

+0

Danke, für die Richtung! – TheKernel