2014-11-05 7 views
6

Chciałbym mieć szablon Play, który jest plikiem JS (w przeciwieństwie do tagów <script> w szablonie HTML). Powodem tego jest to, że skrypt może być buforowany. Muszę jednak utworzyć różnice w skrypcie w zależności od tego, gdzie jest on zawarty i ma to nadzieję w systemie szablonów Play. Mogę już to zrobić, jeśli używam skryptów osadzonych, ale nie można ich przechowywać w pamięci podręcznej.Odtwórz szablon struktury, który w rzeczywistości jest plikiem JS

Znalazłem an existing question, który również prosi o to samo, ale odpowiedź jest zupełnie inna (różne cele).

+0

Można zdefiniować swoje pliki javascript jako szablony Play. Podobnie jak w przypadku szablonów html. Musisz tylko dodać swój szablon i wyrenderować go ze sterownika i dodać trasę. Ale zawsze istnieją lepsze sposoby niż tworzenie dynamicznego javascript. Jeśli chodzi o buforowanie, co jeśli utworzysz normalny plik javascript i udostępnisz go w grze? Myślisz, że to nie będzie buforowane? Czemu? –

+0

@NaderHadjiGhanbari, nie powiedziałem, że normalny plik JS nie będzie buforowany. Raczej potrzebuję móc zastąpić dane w pliku za pomocą Play i obsłużyć rzeczywisty plik JS, a nie osadzony kod JS (w HTML). – Mike

Odpowiedz

15

To proste, wystarczy ... widok z .js tworzyć rozszerzenia, tj: views/myDynamicScript.scala.js:

@(message: String) 

alert('@message'); 

//Rest of your javascript... 

Więc można uczynić go Scala działania jak:

def myDynamicScript = Action { 
    Ok(views.js.myDynamicScript.render(Hello Scala!")).as("text/javascript utf-8") 
} 

lub z Java czynność:

public static Result myDynamicScript() { 
    return ok(views.js.myDynamicScript.render("Hello Java!")); 
} 

Tworzenie route do ciebie działania (prawdopodobnie będziesz chciał dodać niektóre params do niego):

GET /my-dynamic-script.js  controllers.Application.myDynamicScript() 

Więc można umieścić go w templite HTML, tak jak:

<script type='text/javascript' src='@routes.Application.myDynamicScript()'></script> 

Opcjonalnie:

Możesz również renderować skrypt do dokumentu HTML, np. Umieszczając go w sekcji <head>...</head>:

<script type='text/javascript'> 
    @Html(views.js.myDynamicScript.render("Find me in the head section of HTML doc!").toString()) 
</script> 

Edit: @See also samples for other templates types

+0

Nie chciałbym, żeby to brzmiało jak "ja też", dziękuję, ale to rozwiązało całkowicie inny problem ** Mam z SBod modułu submodule gry w porównaniu do zasobów statycznych. Nie muszę już rozwiązywać * tego * problemu, ponieważ jest to wszystko, czego potrzebuję do pracy - wokół wyzwania. Więc dziękuję :) – Techmag