Механизм шаблонов Scala для создания файлов js

Я хочу создавать файлы js, используя механизм шаблонов с помощью Scala. Возможно ли это с помощью популярных шаблонизаторов для Scala, а именно Play и Scalate? Если возможно, то каковы плюсы и минусы использования любого из них?


person Dondey    schedule 10.03.2016    source источник
comment
Зачем вам создавать файлы JS с шаблоном?   -  person Luka Jacobowitz    schedule 10.03.2016
comment
Поскольку файл js состоит из различных статических и определяемых пользователем фрагментов js, которые необходимо комбинировать, которые зависят от проекта, поэтому значения различаются между проектами и должны генерироваться с использованием актуальных данных.   -  person Dondey    schedule 10.03.2016


Ответы (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 в ответе, в любом случае, в зависимости от версии, которую вы используете, может потребоваться принудительно применить это вручную в вашем действии (используйте инструмент проверки браузера, чтобы проверить тип ответа)

person biesior    schedule 10.03.2016

На самом деле это зависит от того, чего вы хотите достичь, то есть от того, насколько сложным будет ваш код JavaScript, но, если это не что-то действительно маленькое и простое, я бы предложил использовать файл Scala.js. Таким образом, вы в основном напишете некоторый код Scala, который будет скомпилирован в JavaScript, и этот скомпилированный JavaScript вы сможете включить в свое приложение Play.

Преимущества написания Scala по сравнению с JavaScript должны быть довольно очевидными (безопасность типов, использование множества существующих библиотек Scala). Недостатком будут некоторые задержки для компиляции Scala -> JavaScript, а также отсутствие такой же бесшовной интеграции Scala.js и Play, как у Play с собственным механизмом шаблонов. Вам решать, стоит ли дополнительная работа, чтобы заставить эти 2 работать вместе.

person Haspemulator    schedule 10.03.2016
comment
Вы имеете в виду компиляцию во время выполнения? Возможно ли это с помощью scala.js? В любом случае, мне нужно встроить пользовательские фрагменты js в вывод, я хочу, чтобы статические части вывода были точно предсказуемыми, и мне нужны минимальные накладные расходы во время выполнения, чтобы компиляция могла помешать. Так что scala.js - это не тот путь, на который я смотрю. К тому же у меня плохие воспоминания о Script#. - person Dondey; 10.03.2016
comment
Нет, он скомпилирован с вашим проектом. Наверное, я неправильно понял ваши требования. Scala.js — это то, что вам нужно, если вам нужно предварительно упаковать код JavaScript с вашим артефактом сборки, так что это не ваш случай. - person Haspemulator; 10.03.2016