Как следует интегрировать JavaScript в веб-приложение Clojure / Ring? - PullRequest
9 голосов
/ 15 марта 2011

Как ресурсы Javascript лучше всего интегрировать в кольцевое приложение?

В частности:

  • Куда бы мы поместили наши файлы .js?
  • Как и где следует настраивать юнит-тесты?
  • Как лучше всего настроить приемочные тесты для функциональности, которая распространяется на стороны клиента и сервера?

Есть ли лучшие практики для javascript с кольцевыми приложениями? Один из возможных ответов - разработать клиентскую и серверную стороны полностью раздельно, по существу разделить все на два отдельных проекта, но я не совсем доволен этой идеей.

(Я также знаю о clojurescript, хотя я думаю в основном о коде javscript, который был написан как javascript.)

Ответы [ 4 ]

1 голос
/ 17 марта 2011

Ring имеет поддержку для подачи файлов непосредственно из папки (ring.middleware.file или ring.middleware.static, что я бы использовал) или из ресурса в jar / war.Лучше всего использовать эти механизмы для обслуживания вашего статического (javascript / images) контента.Если у вас есть свобода делать это, я добавлю маршрут, подобный этому, для обслуживания всех HTTP-запросов на /static/ из такой папки:

(def *route*
    (ring/wrap-static "c:/statics/" ["/static/"]))

Как только вы узнаете, как обрабатывать запросдля статического ресурса (например, ресурса javascript) он такой же, как и для чего-либо другого, например PHP или ASP.

Другой альтернативой является определение маршрутов вашего ресурса в соответствии с обычным режимом, а затем в «всеохватывающем» (обычно что-то вроде этого (ring/GET * request (handle-static-request request)) маршрута, обрабатывает любой оставшийся необслуживаемый запрос статическим запросом.

0 голосов
/ 20 апреля 2012

Для быстрого начала работы, вероятно, самый простой способ начать работу со статическими файлами в среде разработки clojure / ring - это использовать ring.util.response / file-response.

Если вы используете усы, вы можетедобавьте маршрут, подобный этому, в конец списка маршрутов (в качестве промежуточного маршрута):

[&] (fn [req] (file-response (req :uri) {:root "resources/public"}))

Он выберет любой маршрут и попытается найти файл, который соответствует указанному URI, под "[proj-root] / resources / public "directory.

В своем теге html-скрипта вы можете просто использовать, например, src="/js/all.js", а затем убедиться, что у вас есть файл, подобный этому" [proj-root]/resources/public/js/all.js".

см. http://mmcgrana.github.com/ring/ring.util.response.html

0 голосов
/ 01 сентября 2011

Я бы выбрал путь "полного разделения интересов".Ваш код clojure на стороне сервера будет предоставлять только сервисы json, а ваш javascript будет запрашивать данные и добавлять их в html.Clojure упрощает создание таких служб и перевод их структур данных в json.Конечно, у этого подхода есть свои недостатки, вы будете сильно зависеть от JavaScript.

0 голосов
/ 16 марта 2011

Я не эксперт по clojure в Интернете, но я сделаю это.

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

Языки шаблонов

  • Enlive: с большой долей вероятности отделите все (не в отдельный проект) и соберите его вместе с saveive
  • Fleet: как вы это сделаете вPHP или что-то в этом роде.
  • Икота: напишите свои функции clojure с помощью встроенного html и js имеют только большие библиотеки js в отдельных файлах.

Я не могу говорить о тестировании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...