vue.перетаскиваемые и постоянные позиции элементов

#javascript #vue.js #vuex #vue.draggable

#javascript #vue.js #vuex #vue.перетаскиваемый

Вопрос:

Я пытаюсь выполнить постоянную сортировку карточек с помощью vue.draggable, мне еще предстоит поработать над упорядочением при монтировании, и я немного застрял с обновлением индекса всех моих узлов

при перетаскивании я вызываю

  <draggable
      class="grid"
      name="grid"
      @start="drag = true"
      @end="drag = false"
      @update="nodePositionIndex"
    >
      <div v-for="(nodes, index) in $options.myArray" v-bind:key="index">

...
 
     nodePositionIndex(e) {
      console.log(e.newIndex)
      console.log(e.oldIndex)

      nodeid = e.item.firstChild.firstChild.id
      nodesort = e.newIndex
      this.$store.dispatch('sortNode', { nodeid, nodesort })
    },
 

(К вашему сведению, мои перетаскиваемые элементы называются узлами)

Приведенное выше хорошо работает для обновления правильного узла правильной позицией newIndex, но, конечно, все остальные узлы теперь также имеют позиции newIndex, но я не уверен, где я могу получить эту информацию, чтобы обновить базу данных всеми другими newIndex? Я чувствую, что после того, как я услышу @update, мне нужно сказать: «Эй, дайте мне все ваши индексы всех перетаскиваемых элементов, пожалуйста, и тогда я смогу включить это в отправку… но мне также нужно обязательно обновить правильный nodeid…

Затем, как только я это выясню, мне нужно расположить узлы на монтируемых узлах с позиционированием nodesort для начального состояния перетаскиваемых элементов vue. Любая помощь приветствуется. Спасибо

Ответ №1:

Мне удалось сохранить положение каждого узла в нужном месте следующим образом

     nodePositionIndex() {
      var i
      var j
      var dragger = document.getElementById('dragger')

      for (i = 0; i < dragger.childNodes.length; i  ) {
        var count = i

        for (j = 0; j < Object.keys(this.configPositions).length; j  ) {
          if (
            dragger.childNodes[i].firstChild[0].id ==
            this.configPositions[j].node_id
          ) {
            nodeid = this.configPositions[j].node_id
            nodesort = count
            this.$store.dispatch('sortNode', { nodeid, nodesort })
          }
        }
      }
    },

 

Но то, что я хочу сделать, это при смонтированном / при обновлении присвоить перетаскиваемым элементам в списке правильную позицию (индекс) на основе базы данных — я не вижу, как я получаю к этому доступ, чтобы сделать его динамическим, я думал, что идентификатор данных, но я не уверен, к какому элементу это привязано