Элементы списка в сортируемом ответе на addClass только после сортировки

0

Я настраиваю Sortable вложенную форму в приложении Rails 4, немного изменяя учебник Railscast 147, и все работает отлично. В моем проекте каждый li завершает fields_for с полями для вложенного ресурса, включая флажок. Моя проблема заключается в том, что я хочу, чтобы обрабатывать информацию флажка в зависимости от положения флажка, содержащего li. Кроме того, если один из входов проверяется, это также должно влиять на другие поля. Я написал функцию jquery для этого (в основном через addClass и removeClass), и я removeClass эту функцию в свой сортируемый и обработчик события.

  process_components = (o) ->
    $components = $(o).find('li')
    // other stuff
    $components.removeClass("parent_component child_component")
    $components.find('input.is_child').each ->
      firstcheck = $(this).prop('checked')
      secondcheck = $(this).closest('li').next().find('input.is_child').prop('checked')
      if firstcheck is true
        $(this).closest('li').addClass('child_component')
      if firstcheck is false and secondcheck is true
        $(this).closest('li').addClass('parent_component')

$('#components-list').sortable
    axis: 'y'
    items: "> li.component"
    update: ->
      $.post($(this).data('update-url'), $(this).sortable('serialize'))
      process_components $(this)

$('#components-list').on 'click', ':checkbox', (event) ->
    process_components '#components-list'

Моя проблема в том, что это работает правильно только после ручной сортировки элементов списка несколько раз (элементы становятся реагировать на состояние флажка только после того, как изменилась их позиция в списке). Я осмотрелся здесь и в Google, но я не мог понять, почему это происходит. Может ли это иметь какое-то отношение к различиям между JQuery и JQuery UI при обработке addClass? Есть какие нибудь идеи как это починить? благодаря

  • 0
    трудно полностью понять, в чем проблема .... создайте демо в jsfiddle.net и включите шаги, которые нужно выполнить для репликации
  • 0
    возможно, вам нужно также вызвать process_components при загрузке страницы? До сих пор не ясно, в чем проблема, хотя
Показать ещё 1 комментарий
Теги:
jquery-ui-sortable

1 ответ

0
Лучший ответ

После того, как я понял, на самом деле fields_for были виновниками. Я понятия не имею, почему это происходит, но, проверяя различные элементы на отображаемой странице, я обнаружил, что поле hidden :id которое генерируется Rails, НЕ помещается как дочерний элемент li содержащий все остальные поля компонента. Вместо этого поле hidden :id изначально появляется как родной брат li содержащий его, и поэтому process_components нацеливается на неправильный элемент в DOM. После перетаскивания разных li в сортируемом, создается правильная структура DOM, и все работает. Таким образом, решение этого вопроса должно переопределить значения по умолчанию для Rails, указав f.fields_for(:components, include_id: false) и явно включив <%= f.hidden_field :id %> в поля fields_for. Таким образом, все работает, когда страница загружается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню