如何解决SortableJS 在 Rails 和 StimulusJS 中序列化 例如:这是我当前的配置:
我一直试图让 SortableJS 处理多个带有待办事项的列表并序列化 ID。类似于 jQuery Sortable 序列化方法的工作方式。
每个列表中的待办事项总是从 1 开始,随着待办事项的添加而增加,随着待办事项的删除而减少。
例如:
待办事项列表一包含三个待办事项
- 待办事项 5,位置:1
- 待办事项 1,位置:2
- 待办事项 9,位置:3
待办事项二有五个待办事项
- 待办事项 5,位置:1
- 待办事项 1,位置:2
- 待办事项 9,位置:3
- Todo 17,位置:4
- 待办事项 2,位置:5
我已经将 sortableJS 与 stimulusJS 一起工作。一旦添加了任何额外的列表,待办事项将继续被视为它们都属于一个列表,因此如果有 8 个待办事项(列表一中有 3 个待办事项,列表二中有 5 个待办事项),则各自的位置将是 1-8 和不是 1-3 和 1-5。
这是我当前的配置:
drag_controller.js
import {Controller} from "stimulus"
import Sortable from "sortablejs"
export default class extends Controller {
connect() {
this.sortable = Sortable.create(this.element,{
animation: 150,// handle: '.fa-grip-vertical',onEnd: this.end.bind(this)
})
}
end(event) {
let id = event.item.dataset.id
let data = new FormData()
data.append('position',event.newIndex + 1)
Rails.ajax({
url: this.data.get("url").replace(":id",id),type: 'PATCH',data: data
})
}
}
todos_controller.rb
def sort
authorize(:todo,:sort?)
@todo.insert_at(params[:position].to_i)
head(:ok)
end
_todo_list.html.erb
<div data-controller="drag" class="list-group list-group-flush" data-drag-url="/todos/:id/sort">
<% todo_list.todos.order(complete: :asc,position: :asc).each do |todo| %>
<%= content_tag :div,class: 'list-group-item list-group-item-action',"data-id": todo.id do %>
<!-- iterated todos -->
...
<% end %>
<% end %>
</div>
排序操作将执行如下操作:
def sort
params[:todo].each_with_index do |id,index|
Todo.where(id: id).update_all(position: index + 1)
end
head(:ok)
end
我知道使用 toArray()
方法,即 this.sortable.toArray()
,它将为我提供列表中的 id 数组。我不确定如何在我的 drag_controller.js 和 SortableJS 中实现它。如何从 drag_controller.js 获取序列化数据到我的排序操作?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。