Для выяснения вопроса немного: Protovis код записывается с помощью специального тега,
<script type="text/javascript+protovis">
после того, как библиотека Protovis была включена. Однако этот код должен содержать с HTML. Браузер не распознает тип text/javascript+protovis
, поэтому он просто игнорирует тег; Protovis находит и читает текст, содержащий тег, не пытаясь загрузить файл, связанный с src
.
Почему Protovis это делает? Поскольку он запускает парсер, основанный на регулярном выражении, через код для преобразования кода JavaScript 1.8 в код JavaScript 1.6; Таким образом, вы можете использовать передовые функции JavaScript, и ваш код будет работать в старых браузерах. Очень круто.
Хотя вы могли бы, конечно, написать код CoffeeScript, скомпилировать его и вставить в него, что сделало бы для очень утомительного процесса сборки. Хорошей новостью является то, что маловероятно (невозможно?), Что вы получите код из компилятора CoffeeScript, который использует что-либо помимо функций JS 1.6; большинство из этих функций выпекаются, в той или иной форме, в CoffeeScript. Например, понимание массива и сокращенный синтаксис для анонимных функций. Это означает, что вы можете просто использовать
<script type="text/javascript" src="myProtovisCode.js"></script>
для скомпилированного кода CoffeeScript (или text/coffeescript
с coffee-script.js
библиотекой, в целях развития).
Настоящий трюк переводит примеры Protovis с их незнакомым синтаксисом JS 1.8 в CoffeeScript. Например,
cell.add(pv.Dot)
.def("x", function(k0, k1) pv.Scale.linear(flowers, function(d) d[k0]).range(0, s))
.def("y", function(k0, k1) pv.Scale.linear(flowers, function(d) d[k1]).range(0, s))
использует сокращенную JS 1,8 анонимного синтаксис функции, где function(x) x * x
представляет собой сокращенная function(x) { return x * x; }
.Конечно, это легко переводится CoffeeScript:
cell.add(pv.Dot)
.def("x", (k0, k1) -> pv.Scale.linear(flowers, (d) -> d[k0]).range(0, s))
.def("y", (k0, k1) -> pv.Scale.linear(flowers, (d) -> d[k1]).range(0, s))
Для получения дополнительной справки, проверить New in JavaScript 1.8 более в документации Mozilla, (Firefox является единственным браузером, который изначально поддерживает JS 1,8 в настоящее время).
Редактированный вопрос: Я бы хотел избежать ручного этапа компиляции, если возможно ... – nicolaskruchten
Вы можете использовать Sinatra или что-то подобное, чтобы сделать страницу и преобразовать coffeescript в javascript на лету. –