Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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/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
Javascript 使用淘汰排序表拖动observableArray项时出现延迟_Javascript_Jquery Ui_Knockout.js_Jquery Ui Sortable_Knockout Sortable - Fatal编程技术网

Javascript 使用淘汰排序表拖动observableArray项时出现延迟

Javascript 使用淘汰排序表拖动observableArray项时出现延迟,javascript,jquery-ui,knockout.js,jquery-ui-sortable,knockout-sortable,Javascript,Jquery Ui,Knockout.js,Jquery Ui Sortable,Knockout Sortable,我有一个单页应用程序,它为公交车上的座位提供了一个管理UI。它定期从服务器接收更新的数据,这些数据被合并到淘汰视图模型中(使用可观测和可观测数组)。结构如下所示: 视图模型 公共汽车 座位 它使用击倒排序插件,允许用户拖动座椅来更改其顺序 出于各种原因(其中包括性能),来自服务器的数据以diff的形式发送,客户机代码将每个更新合并到单个持久视图模型中,而不是将其吹走并在每次刷新时重新构建 测试页面加载一组初始数据(三条总线,两条带座椅),一切都运行顺利——座椅可以重新排序,没有问题但

我有一个单页应用程序,它为公交车上的座位提供了一个管理UI。它定期从服务器接收更新的数据,这些数据被合并到淘汰视图模型中(使用可观测和可观测数组)。结构如下所示:

  • 视图模型
    • 公共汽车
      • 座位
它使用击倒排序插件,允许用户拖动座椅来更改其顺序

出于各种原因(其中包括性能),来自服务器的数据以diff的形式发送,客户机代码将每个更新合并到单个持久视图模型中,而不是将其吹走并在每次刷新时重新构建

测试页面加载一组初始数据(三条总线,两条带座椅),一切都运行顺利——座椅可以重新排序,没有问题但是,单击“添加总线”按钮(模拟服务器刷新并加载第一条总线(890号)的座位)后,在拖动该特定总线的座位时会出现轻微延迟。这似乎与这些座位在事件发生后添加到总线的方式有关,因为另外两辆车上的座位仍然可以顺利拖动

我在代码本身中没有发现任何性能问题,在Chrome中运行配置文件和时间线工具并拖动图像只会显示大量噪音(重绘、重新计算的样式、鼠标移动事件)。我怀疑我用击倒观测值做了一些错误的事情,但我找不到它


看起来您可以确保有一个“虚拟”项开始,并在应用绑定后立即将其删除,或者一个潜在的解决方法是访问小部件并将
floating
设置为true

类似于:
sortable:{data:Seats,connectClass:false,options:{activate:setFloating}}

与:


这两种方法似乎都是一种变通方法,但似乎都能使其正常工作。

初始化没有项目的jQuery UI可排序表,然后在以后添加它们,这似乎是一个问题。可能只有水平排序。作为一种解决方法,可以确保至少添加一个虚拟项来启动并在应用绑定后立即将其删除。我希望您能加入,Ryan.:)在做了更多的挖掘之后,看起来这正是问题所在。我创建了一个更简单的演示,可以更好地隔离它:一些其他似乎相关的问题:以及
setFloating: function() {
  $(this).data("uiSortable").floating = true;
}