Я хочу создавать файлы js, используя механизм шаблонов с помощью Scala. Возможно ли это с помощью популярных шаблонизаторов для Scala, а именно Play и Scalate? Если возможно, то каковы плюсы и минусы использования любого из них?
Механизм шаблонов Scala для создания файлов js
Ответы (2)
Просто создайте представление с расширением .js
, то есть: app/views/myScript.scala.js
и фиктивным содержимым:
@(message: String)
alert("@message");
Затем добавьте действие в свой контроллер:
def myScript = Action {
// use views.js... NOT views.html... !
Ok(views.js.myScript.render("Whoha! I'm dynamic JS in Scala :)"))
}
или в Java-версии:
public Result myScript(){
// use views.js... NOT views.html... !
return ok(views.js.myScript.render("Yey! I'm dynamic JS in Java :)"));
}
Добавьте маршрут к этому действию:
GET /my-script controllers.Application.myScript()
Таким образом, вы можете использовать этот маршрут напрямую:
<script src="/my-script"></script>
обратите внимание, что Play должен возвращать действительный Content-Type:text/javascript; charset=utf-8
в ответе, в любом случае, в зависимости от версии, которую вы используете, может потребоваться принудительно применить это вручную в вашем действии (используйте инструмент проверки браузера, чтобы проверить тип ответа)
На самом деле это зависит от того, чего вы хотите достичь, то есть от того, насколько сложным будет ваш код JavaScript, но, если это не что-то действительно маленькое и простое, я бы предложил использовать файл Scala.js. Таким образом, вы в основном напишете некоторый код Scala, который будет скомпилирован в JavaScript, и этот скомпилированный JavaScript вы сможете включить в свое приложение Play.
Преимущества написания Scala по сравнению с JavaScript должны быть довольно очевидными (безопасность типов, использование множества существующих библиотек Scala). Недостатком будут некоторые задержки для компиляции Scala -> JavaScript, а также отсутствие такой же бесшовной интеграции Scala.js и Play, как у Play с собственным механизмом шаблонов. Вам решать, стоит ли дополнительная работа, чтобы заставить эти 2 работать вместе.