Теперь, когда я обновился до Rails 3, я пытаюсь найти правильный способ разделения и повторного использования фрагментов javascript.Вот сценарий, с которым я имею дело:
У меня есть страница с двумя областями: одна с элементами, которые должны быть перетаскиваемыми, другая с опускаемыми элементами.
Когда страница загружается, яиспользуйте jQuery для настройки draggables и droppables.В настоящее время у меня есть сценарий в головной части application.html.erb, который, я уверен, не является правильным решением, но, по крайней мере, работает.
Когда я нажимаю кнопку на странице, ajax-вызовсделано для моего контроллера, который заменяет draggables новым набором элементов, которые также должны быть draggable.У меня есть файл js.erb, который отображает частичное в правильном месте.После рендеринга мне нужно сделать новые элементы перетаскиваемыми, поэтому я хотел бы повторно использовать код, который в настоящее время находится в application.html.erb, но я не нашел правильного способа сделать это.Я могу сделать перетаскиваемые новые элементы только путем вставки кода непосредственно в мой файл js.erb (yuck).
Что бы я хотел иметь: - файл javascript, содержащий функции prepdraggables () и prepdroppables() - способ вызова любой функции из application.html.erb или из файла js.erb
Я пытался использовать: content_for для хранения и повторного использования кода, но не могу его получитьработает правильно.
То, что у меня сейчас есть в разделе head файла 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();