我用Vue js 1.0.25.

我想用dynamic textboxes创建一个list.基本的 idea 是点击Add Answer按钮,它应该创建一个dynamic text-box和它的index号,比如Ans 1和一个Remove按钮.

用户最多可以添加5个答案.此外,用户还可以使用Answer's label as a handler获得re-order个答案.我用jQuery Sortable作为Vue directive来排序答案.

它似乎工作得很好,这里我为它创建了一个JSFIDLE:https://jsfiddle.net/devendragohil/6stotpaq/23/

但问题始于重新排序后删除答案.

我该怎么修?

推荐答案

我不知道你们的问题在哪里,但我认为它与jQuery Sortable有关.我用vue-sortable复制了你们的例子,它运行得很好.

文档很简单,简言之,你只需要在列表容器中添加v-sortable个,其他任何东西都应该按你现有的方式工作.

EDIT

正如@g.annunziata在 comments 中提到的,如果订购后再添加一个新项目,前面的示例不起作用.

为了解决这个问题,我们还需要更新数据数组,在指令v-sortable="{onUpdate: onUpdate }"上添加这个选项,并在vm上添加那个方法

onUpdate: function (event) {
   var movingElement = this.answers.splice(event.oldIndex, 1)[0];
   this.answers.splice(event.newIndex, 0, movingElement);
}

当我试图解决这个问题时,我遇到了另一个问题,如果我将一个元素移动到最后一个位置,然后添加一个新项目,我会遇到这个可怕的错误

Cannot read property 'parentNode' of null

我并没有深入探究造成这种情况的真正原因,但作为解决方法,只需在元素列表之后添加一个不可见的div,类似这样的东西.

<div class="list-group" v-sortable="{ handle:'.handle', onUpdate: onUpdate }">
  <div class="list-group-item" v-for="answer in answers">
    ...
  </div>
  <div style="display:none"></div>
</div>

示例已修复,请在http://jsbin.com/qinofow/edit?html,js,output处查看

Vue.js相关问答推荐

无法从CDN使用Vue和PrimeVue呈现DataTable

Vue ChildComponent (GrandchildComponent) 应该更新 ParentComponent 的列表

vue : 多个样式的类绑定在一个

为什么普通对象在 Vue3 中自动变成响应式的?

如何 for each 动态创建的按钮/文本字段设置唯一变量?

将媒体源/流绑定到视频元素 - Vue 3 组合 API

如何在Vue js 3中根据API响应替换react 值

将props传递给设置时的VueJS 3组合API和TypeScript类型问题:类型上不存在属性 user用户

在 VueJS 中存储图像的正确位置是什么 - 公共文件夹或assets文件夹?

如何在 vue.js 模板中显示空间而不是 undefined 和 null?

Object.assign 没有正确复制

如何将Vue的主应用程序渲染到body元素?

如何在 Vue.js 中使用 MaterializeCss?

如何获取 Vue 路由历史记录?

如何在 vue 3 脚本设置中的组件上使用 v-model

错误:vue-loader 要求 @vue/compiler-sfc 存在于依赖树中

如何在 Vue.js 中获取组件元素的 offsetHeight?

Vue JS 在渲染前等待数据

使用 Vue 的点击编辑文本字段

超过最大调用堆栈大小 Vuetify