Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ui 手动更新jquery ui可排序元素_Jquery Ui_Sorting_Knockout.js_Jquery Ui Sortable - Fatal编程技术网

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('

场景: 在淘汰/jquery可排序ui中排序元素

当在排序表中收到项目时,我使用以下事件:

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;