【发布时间】:2019-04-16 11:19:53
【问题描述】:
我正在尝试使用vue-draggable 显示可拖动元素列表,这些元素有时在给定位置由固定元素分隔。
到目前为止,我尝试了以下方法:在 v-for 循环内需要时创建不同的元素。
<draggable :list="list" class="dragArea" :class="{dragArea: true}"
:options="{group:'people', draggable: '.drag'}" @change="handleChange">
<template v-for="(element, index) in list">
<div class="drag">
{{element.name}}
</div>
<div class="nodrag" v-if="index === 2">Fixed element</div>
</template>
</draggable>
但是,它破坏了我的应用程序的行为,因为 onChange 事件返回的索引不再是预期的。 (您可以在this jsfiddle 上查看复制品)
我做错了吗?我还考虑过使用move 道具来禁用拖动功能,如建议here 那样,但问题仍然存在,因为我相信我正在使用可拖动列表之外的元素。
在我们的生产用例中,固定元素的索引是可变的,如果这很重要的话。
【问题讨论】:
-
那么固定元素的位置不应该改变吗?还是它们只是不可拖动?
-
固定元素的位置不应该改变,它之前和之后应该有相同数量的可拖动项目。它实际上代表某种阈值
-
你为什么不列两个清单呢?否则,期望实际上是没有意义的。如果在固定之前有 2 个元素,在固定元素之后有 2 个元素 --> 那么你将 1 个元素从固定之前移动到之后,那么,固定之前的元素是什么?一个空字符串?
-
假设你有 A,B,Fixed,C,D 并且你将 B 移动到 C 和 D 之间,那么你应该得到 A,C,Fixed,B,D 理想情况下我希望 Fixed 只是可拖动组件逻辑完全忽略的视觉标志
-
我会听一些 onChange 事件,然后手动将元素移动到固定元素的上方/下方。当使用像 vue-draggable 这样的东西时,你必须记住,如果它不是根据你所想的功能开发的,你可能不得不自己创建它,即“手动”上下移动它们。您还可以 fork vue-draggable 或发出拉取请求以添加功能,这样您就可以保持代码更简洁。
标签: javascript vue.js draggable sortablejs