HTML5 Scortable сортировка и вызов ajax для изменения состояния

Я работал над приложением todo, чтобы учиться. Я построил приложение todo с состоянием на рельсах. это выглядит так

введите описание изображения здесь

У меня была кнопка для изменения состояния задач. Но я хочу сделать перетаскивание. Так что я возился с сортируемой библиотекой html5. Я перешел на перетаскивание в состоянии задачи, что означает перетаскивание в пределах задачи, либо в процессе, либо в процессе. Но я не могу перетаскивать между состояниями и переходить в соответствующее состояние.

Мне нужна помощь в понимании, а не просто руководство о том, как это сделать. я приложил свои коды ниже,

контроллер

def change
    @task.update_attributes(state: params[:state])
    respond_to do |format|
        format.html { redirect_to tasks_path, notice: 'Task updated' }
    end
end

Посмотреть

<div class="row">
  <div class="col-lg-4 sortable1"><h2 class="text-center">Todo</h2>
    <% @to_do.each do |task| %>
    <div class="<%= task.state == 'to_do' ? 'card card-outline-info' : task.state == 'in_progress' ? 'card card-outline-success' : 'card card-outline-warning'  %>" style="max-width: 20rem;" id="<%= task.id %>">
      <div class="card-header action-box">
        <div class="text-xs-left">
          <strong><%= link_to task.title, edit_task_path(task)%></strong>
        </div>
          <div class="btn btn-secondary btn-sm">
            <i class="fa fa-play-circle" aria-hidden="true"></i>
          </div>
      </div>
    </div>
    <%end%>
  </div>

  <div class="col-lg-4 sortable2"><h2 class="text-center">In Progress</h2>
    <% @in_progress.each do |task| %>
    <div class="<%= task.state == 'to_do' ? 'card card-outline-info' : task.state == 'in_progress' ? 'card card-outline-success' : 'card card-outline-warning'  %>" style="max-width: 20rem;" id="<%= task.id %>">
      <div class="card-header action-box">
        <div class="text-xs-left">
          <strong><%= link_to task.title, edit_task_path(task)%></strong>
        </div>
          <div class="btn btn-secondary btn-sm">
            <i class="fa fa-play-circle" aria-hidden="true"></i>
          </div>
      </div>
    </div>
    <%end%>
  </div>


  <div class="col-lg-4 sortable3"><h2 class="text-center">Done</h2>
    <% @done.each do |task| %>
    <div class="<%= task.state == 'to_do' ? 'card card-outline-info' : task.state == 'in_progress' ? 'card card-outline-success' : 'card card-outline-warning'  %>" style="max-width: 20rem;" id="<%= task.id %>">
      <div class="card-header action-box">
        <div class="text-xs-left">
          <strong><%= link_to task.title, edit_task_path(task)%></strong>
        </div>
          <div class="btn btn-secondary btn-sm">
            <i class="fa fa-play-circle" aria-hidden="true"></i>
          </div>
      </div>
    </div>
    <%end%>
  </div>
</div>

Маршруты

  resources :tasks do
    member do
      put :change
    end
  end

Javascript

var ready;
var id = $(this).attr("id");
ready = function(){
    // call sortable on our div with the sortable class
    $('.sortable1').sortable();
    $('.sortable2').sortable();
    $('.sortable3').sortable();
    $.ajax({
        type: "PUT",
        url: '/tasks/' + id + '/change',
        data: { order: updated_order }
    });
}

$(document).ready(ready);
/**
 * if using turbolinks
 */
$(document).on('page:load', ready);

ОБНОВИТЬ

Получил работу, чтобы перейти к следующему состоянию, как это

Javascript

var ready;
var id = $(this).attr("task_id");
ready = function(){
    // call sortable on our div with the sortable class
    $('#sortable1').sortable(
      {
      connectWith: ".connected"
    }
    );
    $('#sortable2').sortable({
      connectWith: ".connected"
    });
    $('#sortable3').sortable({
      connectWith: ".connected"
    });
    $.ajax({
        type: "PUT",
        url: '/tasks/' + id + '/change'
    });
}

$(document).ready(ready);
/**
 * if using turbolinks
 */
$(document).on('page:load', ready);

Посмотреть

<div class="row">
  <div class="col-lg-4"><h2 class="text-center">Todo</h2>
    <ul id="sortable1" class="connected sortable list">
    <% @to_do.each do |task| %>
    <li>
    <div class="<%= task.state == 'to_do' ? 'card card-outline-info' : task.state == 'in_progress' ? 'card card-outline-success' : 'card card-outline-warning'  %>" style="max-width: 20rem;" task-id="<%= task.id %>">
      <div class="card-header action-box">
        <div class="text-xs-left">
          <strong><%= link_to task.title, edit_task_path(task)%></strong>
        </div>
          <div class="btn btn-secondary btn-sm">
            <i class="fa fa-play-circle" aria-hidden="true"></i>
          </div>
      </div>
    </div>
  </li>
    <%end%>
    </ul>
  </div>

  <div class="col-lg-4"><h2 class="text-center">In Progress</h2>
    <ul id="sortable2" class="connected sortable list">
    <% @in_progress.each do |task| %>
    <li>
    <div class="<%= task.state == 'to_do' ? 'card card-outline-info' : task.state == 'in_progress' ? 'card card-outline-success' : 'card card-outline-warning'  %>" style="max-width: 20rem;" task-id="<%= task.id %>">
      <div class="card-header action-box">
        <div class="text-xs-left">
          <strong><%= link_to task.title, edit_task_path(task)%></strong>
        </div>
          <div class="btn btn-secondary btn-sm">
            <i class="fa fa-play-circle" aria-hidden="true"></i>
          </div>
      </div>
    </div>
  </li>
    <%end%>
    </ul>
  </div>


  <div class="col-lg-4"><h2 class="text-center">Done</h2>
    <ul id="sortable3" class="connected sortable list">
    <% @done.each do |task| %>
    <li>
    <div class="<%= task.state == 'to_do' ? 'card card-outline-info' : task.state == 'in_progress' ? 'card card-outline-success' : 'card card-outline-warning'  %>" style="max-width: 20rem;" task-id="<%= task.id %>">
      <div class="card-header action-box">
        <div class="text-xs-left">
          <strong><%= link_to task.title, edit_task_path(task)%></strong>
        </div>
          <div class="btn btn-secondary btn-sm">
            <i class="fa fa-play-circle" aria-hidden="true"></i>
          </div>
      </div>
    </div>
  </li>
    <%end%>
    </ul>
</div>

Но он не будет переходить к следующему ul, если ul не имеет пустого списка, он просто перемещается, только если ul другого состояния уже имеет элемент li

0 ответов

Другие вопросы по тегам