Делегирование событий jQuery и конвейер ресурсов Rails - PullRequest
1 голос
/ 01 ноября 2011

Я использую jQuery UI в своем приложении Rails 3.1.Это базовое приложение CRUD, структурированное парой «главных» контроллеров, которые обрабатывают общую структуру приложения - целевые страницы и рабочий процесс, а затем другие контроллеры, которые обрабатывают взаимодействия модели (через запросы ajax).

Многомоего приложения использует встроенное редактирование для форм и тому подобное, и у меня есть много таких частичек, как:

_action_list.html.erb

<script>
    $("#action-new").button({
        icons: {
            primary: "ui-icon-plus"
        }
    });

    $(".buttonset").buttonset();

    $("#actions").accordion();  
</script>


<div id="actions" class="ui-widget-content ui-corner-all">
    <% @segment.action_items.each do |action_item| %>
            <%= render action_item %>
    <% end %>
</div>

<div id="new-action">
</div>

<br />
<%= link_to "New Action",
 new_report_segment_action_item_path(@segment.report, @segment),
 {:id => "action-new", :method => :get, :remote => true} %>

который обрабатывается с помощью action_list.js.erb :

$("#actions").html("<%= escape_javascript(render "action_list") %>")

Все работает так, как должно при первой загрузке страницы, однако после прохождения процесса редактирования (форма редактирования визуализации ->save -> rerender action_list) некоторые элементы jQuery (в данном случае аккордеон) отображаются не так, как должны, т.е. без применения стиля jQuery.Я знаю, что это, вероятно, связано с тем, что элемент необходимо повторно привязать с помощью делегирования события - в общих чертах здесь & здесь .

Итак, я хочучтобы извлечь встроенный JS в файлы конвейера активов, а затем реализовать делегирование событий, чтобы связывание элементов происходило в фоновом режиме - я хочу, чтобы все JS не попадали в мои представления.Как мне выполнить этот «путь Rails», не прибегая к написанию всех моих функций ajax в jQuery?

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