Vue.draggable Получить перетаскиваемый элемент и список ID
Я прочитал всю документацию и стекопотока, который я могу найти, но все еще возникают проблемы с этим.
Я строю клон Trello с помощью Vue и Rails.
У меня много перетаскиваемых списков.
В каждом списке есть перетаскиваемые карточки.
Когда я перетаскиваю карту из одного списка во второй список, как мне сохранить это в моей конечной точке рельсов Ajax?
Я пытался использовать @end
метод и :move
опора, но не повезло.
#app.vue
<template>
<draggable v-model="lists" group='lists' class="row dragArea" @end="listMoved">
<div v-for="(list, index) in lists" class="col-3">
<h6>{{ list.name }}</h6>
<hr />
<draggable v-model="list.cards" group='cards' class="dragArea" :move="cardMoved">
<div v-for="(card, index) in list.cards" class="card card-body mb-3">
{{ card.name }}
</div>
</draggable>
<div class="card card-body">
<input v-model="messages[list.id]" class="form-control" ></input>
<button v-on:click="submitMessages(list.id)" class="btn btn-secondary">Add</button>
</div>
</div>
</draggable>
</template>
<script>
import draggable from 'vuedraggable'
export default {
components: { draggable },
props: ["original_lists"],
data: function() {
return {
messages: {},
lists: this.original_lists
}
},
methods: {
cardMoved: function(event) {
console.log(event)
var data = new FormData
data.append("card[list_id]", WHERE_DO_I_FIND_THIS_ID)
data.append("card[position]", event.draggedContext.element.id)
Rails.ajax({
url: `/cards/${event.draggedContext.element.id}/move`,
type: "PATCH",
data: data,
datatype: "json"
})
},
}
}
</script>
1 ответ
Используйте событие change, которое содержит всю необходимую информацию dnd и вызывается только после завершения операции перетаскивания.
По предложению @sovalina вам нужно передать дополнительную информацию, связанную со списком:
:change="changed(list.id, $event)"
Также ваш div должен быть набран:
<div v-for="(card, index) in list.cards" :key="card.name" class="card card-body mb-3">