Ruby on Rails с ненавязчивым JavaScript - управление URL - PullRequest
3 голосов
/ 02 августа 2010

Я использую модульную систему файлов JavaScript при работе в Rails - в основном каждое представление будет иметь свой собственный модуль в файле .js.Моя проблема возникает, когда мне нужна динамическая, сгенерированная Rails строка в моем JavaScript, например строки перевода и URL.

Переводы хорошо решаются с использованием babilu , но я все еще застрял в генерацииURL-адресов.Я мог бы написать что-то, что просматривало бы маршруты в приложении и генерировать методы JavaScript, которые я мог бы передавать, например, идентификаторы объектов.

Альтернативой было бы передать уже сгенерированный URL-адрес любым функциям, которые я вызывалЭто звучит грязно, но может быть самой гибкой альтернативой.

Ответы [ 3 ]

3 голосов
/ 06 июля 2011

Старый вопрос, но вот другой способ.Спецификация HTML 5 допускает использование пользовательских атрибутов данных.

По вашему мнению:

<button id="myButton" data-url="<%= my_resource_path %>">Click me</button>

Тогда в вашем упакованном js:

var myurl = $("#myButton").data("url");

См. здесь также.

3 голосов
/ 02 августа 2010

Я не знаю, есть ли какой-нибудь действительно приятный способ сделать это, но одна возможность состоит в том, чтобы ваш серверный код записал небольшой блок <script> на страницу, чтобы объявить некоторые переменные, которые может обнаружить ваш упакованный Javascript, и использовать.

<script>
  var pageGlobals = {
    interestingURL: <% ... url %>,
    ...
  };
</script>

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

По моему опыту, таких вещей, как правило, очень мало, чтобы связываться с готовым Javascript, поэтому блок <script> имеет тенденцию не выходить из-под контроля. Я похоронил свой шаблон страницы, поэтому мне даже не нужно думать об этом с новыми страницами.

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

Мне это тоже не нравится.Идеальным решением для меня были бы шаблоны javascript.Представьте себе, что в файле .js вы можете сделать:

var users_path = '<%= users_path %>';

Но это будет означать, что файлы .js должны будут регенерироваться в каждом запросе (ну, можно использовать кэширование, как в rails html).

В любом случае, то, что вы также можете сделать, это поместить динамические вещи в атрибуты данных.Таким образом, вы можете сделать, например,

<%= select_tag :select_something, select_options, 'data-url' => users_url %>

, а затем прочитать этот атрибут в файле JavaScript.Я предпочитаю это решению, предложенному Пойнти.

Редактировать: Ну, на самом деле кто-то реализовал идею динамического файла .js.Кажется, достаточно просто, просто создайте контроллер javascripts и свяжитесь с его действиями через javascript_include_tag: динамические файлы javascript

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