2017-03-06 1 views
0

In meinem Stück Rahmenprojekt habe ich eine bestätigte funktionale Java Karte Form Java, die auf eine HTML-Seite übergeben wird home.scala.htmlWie übergebe ich eine Java Map <Long, Integer> in Scala-Play?

Die Kartengröße wird als andere (Arbeits-) Variablen, die oben auf der Seite übergeben :

@(workingVar1: String, workingVar2: Int, mapVar: Map[Long, Integer]) 

Aber Entwickler-Tools in google chrome Highlights dieser Teil des Javascript (in home.scala.html Kopf eingebettet):

var myMap = @mapVar; 

Mit dem Fehler Uncaught SyntaxError: Unexpected token =

Also nichts von dem Javascript funktioniert. Wie verfahre ich diese Karte?

Antwort

0

Eine unelegant aber funktionale Lösung ist wie folgt:

als Zeichenkette in der Java-Karte Bringen:

var stringMap = "@mapVar"; 

Entfernt die Zahnspange und Leerzeichen in die Zeichenfolge eingefügt unnötig

stringMap = stringMap.replace(/{/g,''); 
    stringMap = stringMap.replace(/}/g,''); 
    stringMap = stringMap.replace(/ /g,''); 

Teilen Sie die mapString durch , und für jedes Paar erneut durch = Teilen, Schlüssel und Werte wie Sie gehen. Diese müssen an die richtigen Datentypen analysiert werden, bevor zu einer JavaScript-Array Hinzufügen jsArr:

var pairArray = mapString.split(","); 
    pairArray.forEach(function(pair) { 
     var values = pair.split("="); 
     var longString = values[0]; 
     var intString = values[1]; 
     var myLong = parseFloat(longString); 
     var myInt = parseInt(intString); 
     jsArr.myLong = myInt; 
} 

Wo jsArr vorher definiert wurde.

0

Sie können Java/Scala-Variablen in Twirl Scala-Vorlagen verwenden, und beide werden auf der Serverseite ausgeführt. Jetzt auf der Serverseite Tirl-Engine übersetzt Java-Objekt in etwas (was wahrscheinlich nicht was Sie wollen) und in diesem Formular an den Client übergeben wird, und dann wird dieses JavaScript ausgeführt.

Sie möchten sicherstellen, dass der Client gültigen JavaScript-Code erhält. Um den richtigen Wert zuzuweisen, müssen Sie einige JSON-Bibliotheken mischen, die Ihnen helfen, den Wert richtig zuzuweisen.

Eg. auf der Steuerungsseite:

... 
Map<Long, Integer> map = new HashMap<>(); 
map.put(1L, 2); 
map.put(3L, 3); 
String yourMap = Json.stringify(Json.toJson(map)); 

Jetzt wollen Sie yourMap zu sehen, passieren, und dann werden Sie zu myMap mit @Html, wie wir es als Rohinhalt Fragment wollen zuweisen:

@(workingVar1: String, workingVar2: Int, mapVar: String) 
var myMap = @Html(mapVar); 

Versuchen und lassen Ich weiß, ob es geholfen hat.

+0

Vielen Dank für Ihre Antwort. Doing, wie Sie vorschlagen und anfordern ein console.log (myMap) nach dem Zuweisen zu @Html (mapVar) gab mir [object Object] – jMan

+0

So ist es richtig, oder? Jetzt ist es JavaScript-Objekt mit Feldern, die Ihre Schlüssel in Karte und entsprechenden Werten waren. – Rumid

Verwandte Themen