Это в основном то, что я в итоге делал. Я поместил $ (document) .ready (prep_drag_drop) в любой файл, для которого требовалась возможность перетаскивания.

ь, когда я обновился до Rails 3, я пытаюсь найти правильный способ разделения и повторного использования фрагментов javascript. Вот сценарий, с которым я имею дело:

У меня есть страница с двумя областями: одна с элементами, которые должны быть перетаскиваемыми, а другая - с дескрипторами.

Когда страница загружается, я использую jQuery для настройки draggables и droppables. В настоящее время у меня есть сценарий в головной части application.html.erb, который, я уверен, не является правильным решением, но, по крайней мере, работает.

Когда я нажимаю кнопку на странице, мой контроллер выполняет вызов ajax, который заменяет перетаскиваемые элементы новым набором элементов, которые также должны быть перетаскиваемыми. У меня есть файл js.erb, который отображает частичное в правильном месте. После рендеринга мне нужно сделать новые элементы перетаскиваемыми, поэтому я хотел бы повторно использовать код, который в настоящее время находится в application.html.erb, но я не нашел правильного способа сделать это. Я могу только сделать новые элементы перетаскиваемыми, вставив код прямо в мой файл js.erb (yuck).

Что бы я хотел иметь: - файл javascript, содержащий функции prepdraggables () и prepdroppables () - способ вызова либо функции из application.html.erb, либо из файла js.erb

Я пытался использовать: content_for для хранения и повторного использования кода, но не могу заставить его работать правильно.

Что у меня сейчас есть в разделе заголовка application.html.erb

<% content_for :drag_drop_prep do %>
  <script type="text/javascript" charset="utf-8">
  $(document).ready(function () {

  // declare all DOM elements with class draggable to be draggable
  $( ".draggable" ).draggable( { revert : 'invalid' });

  // declare all DOM elements with class legal to be droppable
  $(".legal").droppable({
    hoverClass : 'legal_hover',
    drop : function(event, ui) {

      var c = new Object();
      c['die'] = ui.draggable.attr("id");
      c['cell'] = $(this).attr("id");
      c['authenticity_token'] = encodeURIComponent(window._token);

      $.ajax({
         type: "POST",
         url: "/placeDie",
         data: c,
         timeout: 5000
      });

  }});
});
</script>
<% end %>

undo.js.erb

$("#board").html("<%= escape_javascript(render :partial => 'shared/board', :locals => { :playable => true, :restartable => !session[:challenge]}) %>")
// This is where I want to prepare draggables.
<%= javascript_include_tag "customdragdrop.js" %> // assuming this file had the draggables code from above in a prepdraggables() function
prepdraggables();

Ответы на вопрос(1)

Ваш ответ на вопрос