2016-03-28 3 views
0

Mein Ziel: Lernen Sie die Einschränkungen (falls vorhanden) für Parameter, die ich von der Steuerung zum Anzeigen senden kann. Im Moment überprüfe ich, ob ich ein Twirl-Schlüsselwort (z. B. @, @für usw.) von der Controller-Funktion an die Ansicht senden kann, und lade dann einen Teil der Seite mit JS neu.Playframework 2.x (Scala): Übergeben eines Twirl/HTML-Codes von einer Controller-Funktion an die Ansicht

Wir können eine unverarbeitete HTML an die Ansicht übergeben, während as(HTML) in einer Controller-Funktion verwendet wird. Jedoch ist es möglich, einen Block von scala.html Typ Code mit all ihrer Syntax Zucker von der Controller-Funktion zu Ansichten 'verwandte JS-Funktion zu senden; so dass es es im verwandten div zeigen kann?

<p style="padding:1rem;"> @for(i <- items){<h2>i.name</h2} </p> 

Wenn ich die oben in der Reglerfunktion wickeln: Zum Beispiel, wie/kann, kann ich folgendes passieren

Ok(<p style="padding:1rem;"> @for(i <- items){<h2>i.name</h2} </p>).as(HTML)

Zu Recht, ich werde die folgende Fehlermeldung erhalten; da der Code nicht reine HTML ist:

enter image description here

So Gibt es eine Möglichkeit? oder alle Schlüsselwörter der Template-bezogenen Engine können nicht vom Controller an die View gesendet werden ?; und müssen nur für die Dateien der Ansichten verwendet werden.

+0

Über dein eigenes Ziel hinaus, das zu lernen, gibt es einen bestimmten Anwendungsfall, den du erreichen willst? Es fällt mir schwer, den Vorteil dieses Ansatzes herauszufinden. – Anton

+0

@Anton könnte es als Teil einer schnelleren Streaming-Lösung verwendet werden, offensichtlich wenn das Verhältnis von Server (s)/Client (s) kein Problem ist. –

Antwort

1

wirbeln Code auf dem Server in regelmäßigen scala Funktionen kompiliert wird (siehe https://www.playframework.com/documentation/2.5.x/ScalaTemplateUseCases#Tags-%28they-are-just-functions,-right?%29)

Sie können zB eine Datei wie renderItems.scala.html

@(items: List[Item]) 
<p style="padding:1rem;"> @for(i <- items){<h2>@i.name</h2} </p> 

und nennen Sie es wie

Ok(renderItems(items)) 
+0

auch hier ist ein interessanter Ansatz, den Sie möglicherweise nützlich finden https://github.com/brikis98/ping-play – OlegYch

+0

Danke, gehen Sie zu spielen! damit ein wenig, und dann alle aktualisieren, und wenn nötig, diese Antwort auf diese. –

Verwandte Themen