Можно написать код Protovis в CoffeeScript? - PullRequest
5 голосов
/ 08 февраля 2011

Я хотел бы создавать визуализации с использованием Protovis, но писать на CoffeeScript, а не на JavaScript (частично для обозначения функции (x)->x, но также и по другим причинам)

Возможно ли это?Какой тег <script> я бы использовал, и есть ли какой-то особый порядок тегов сценария, которые необходимы?

Спасибо.

Редактировать: Я бы хотел избежать шага ручной компиляции, если это возможно.

Ответы [ 3 ]

7 голосов
/ 08 февраля 2011

Чтобы прояснить вопрос немного: код 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))

Для получения дополнительной информации ознакомьтесь с Новое в JavaScript 1.8 в документации Mozilla (Firefox - единственный браузер, который в настоящее время изначально поддерживает JS 1.8).

2 голосов
/ 08 февраля 2011

Лучше написать на CoffeeScript только для целей разработки, а затем скомпилировать в простой JS для включения в <script>.

Компиляция с использованием флага -c:

coffee -c someFile.coffee

Вывод будет someFile.js в том же каталоге.

1 голос
/ 08 февраля 2011

ОК. Я немного поиграл с этим, и на самом деле я могу использовать Protovis с Coffeescript, используя тег <script type="text/coffeescript">, который может иметь атрибут src="x.coffee".Внешняя компиляция не требуется.Очевидно, что для этого требуется, чтобы браузер компилировал Coffeescript в Javascript при каждой загрузке страницы, но для быстрых задач визуализации это работает для меня.

...