Jquery ui 手动更新jquery ui可排序元素
场景: 在淘汰/jquery可排序ui中排序元素 当在排序表中收到项目时,我使用以下事件:Jquery ui 手动更新jquery ui可排序元素,jquery-ui,sorting,knockout.js,jquery-ui-sortable,Jquery Ui,Sorting,Knockout.js,Jquery Ui Sortable,场景: 在淘汰/jquery可排序ui中排序元素 当在排序表中收到项目时,我使用以下事件: beforeStop: function (event2, ui2) { draggedItem2 = ui2.item; itemDroppedIndex2 = ui2.item.index(); if (fieldInSortable) { // change order of the item var startPos = $(this).data('
beforeStop: function (event2, ui2) {
draggedItem2 = ui2.item;
itemDroppedIndex2 = ui2.item.index();
if (fieldInSortable) {
// change order of the item
var startPos = $(this).data('start_position');
// Update order
ko.contextFor(this).$data.updateElementPriorities(startPos, itemDroppedIndex2);
} else {
fieldInSortable = false;
}
},
updateElementPriorities
如下所示:
self.updateElementPriorities = function (oldIndex, newIndex) {
var fieldUpdated = null;
for (var j = 0; j < self.elementTypes().length; j++) {
var eType = self.elementTypes()[j];
var currPriority = eType.priority();
if (currPriority == oldIndex && !fieldUpdated) {
eType.priority(newIndex);
fieldUpdated = eType;
}
else if (newIndex < oldIndex) {
if (currPriority >= newIndex)
eType.priority(currPriority + 1);
}
else if (newIndex > oldIndex) {
if (currPriority <= newIndex)
eType.priority(currPriority - 1);
}
}
};
问题:
添加新元素或对当前元素进行排序时,它们通常不会按应有的方式进行排序。有时候,我的意思是,有时候,它会显示正确的priority()编号,但在UI中顺序不正确。是否有其他算法;手动执行此排序并显示“获取正确的排序元素”更有效
我正处于一个无法使用任何库或进行重大更改的阶段,这样做会有风险。因此,我希望在相同的代码结构中有任何建议/更改
更新:当我做了很多拖拉操作,但还没有添加任何新项目时,一些priority()属性开始得到负值。只需对页面中的现有项进行排序。我将遵循将vm绑定到可排序dom元素的范例。然后你可以专注于对你的可观测阵列进行排序我以前就知道了,但我不知道它也这么容易使用。我花了一些时间来整合它,现在的效果就像一个魔咒,事实上比我最初手动创建的sortable要好得多。谢谢
var sorted = elementTypes.sort(function (l, r) {
return l.priority() > r.priority() ? 1 : -1;
});
return sorted;