【发布时间】:2018-04-09 13:31:31
【问题描述】:
我有一个array 的对象:
ruta: [
{ 'order': 1, 'id': 121 },
{ 'order': 2, 'id': 123 }
]
我将它用作buefy 表的模型,同时,我使用扩展名sortable.js 手动对表行排序:
const createSortable = (el, options, vnode) => {
return Sortable.create(el, {
...options,
onEnd: function (evt) {
const data = vnode.context.ruta
const item = data[evt.oldIndex]
if (evt.newIndex > evt.oldIndex) {
for (let i = evt.oldIndex; i < evt.newIndex; i++) {
data[i] = data[i + 1]
}
} else {
for (let i = evt.oldIndex; i > evt.newIndex; i--) {
data[i] = data[i - 1]
}
}
data[evt.newIndex] = item
//here
for (let i = 0; i < data.length; i++) {
data[i].order = i + 1;
}
}
})
}
表格已正确呈现,但我需要在每次手动排序时更新order 参数以反映表格的真实顺序。比如我需要把第五行移到表的开头,所以它的order参数应该是1,其余行需要反映2、3、4和5。
正如您在代码中看到的,我已经尝试过:
for (let i = 0; i < data.length; i++) {
data[i].order = i + 1;
}
因为我想从 1 开始订单的价值。我还尝试将更改放入 if / else 块中:
if
data[i].order = i + 1;
else
data[i].order = i - 1;
但它也没有工作。行的顺序以错误的方式更改。
【问题讨论】:
标签: javascript vuejs2 sortables