2011-03-15 2 views
9

Как ресурсы Javascript лучше всего интегрированы в кольцевое приложение?Как включить javascript в веб-приложение Clojure/Ring?

В частности:

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

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

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

ответ

-6

Я не веб-эксперт Clojure, но я дам ему выстрелили.

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

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

  • Enlive: Proberly seperat все (не в sepred проекта) и вытащить его вместе с enlive
  • флота: Просто, как вы могли бы сделать это в PHP или что-то.
  • Hiccup: Напишите свои функции clojure с помощью встроенных html и js, только у вас есть большие библиотеки js в файлах sepret.

Я не могу говорить об испытаниях.

1

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

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

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

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

-1

я бы выбрал путь «полного разъединения». Код вашей clojure на стороне сервера будет только раскрывать json-сервисы, и ваш javascript будет запрашивать данные и добавлять их в html. Clojure упрощает создание таких сервисов и переводит его в структуры данных json. Из-за этого подхода есть свои недостатки, вы сильно зависите от javascript.

0

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

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

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

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

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

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