Javascript 剔除可排序绑定顺序

Javascript 剔除可排序绑定顺序,javascript,jquery,knockout.js,jquery-ui-sortable,Javascript,Jquery,Knockout.js,Jquery Ui Sortable,这是一个问题的后续行动: 还有两件事我正在努力实现。首先,当一个嵌套列表项被拖到另一个列表中,父项为空时,我想删除父项。我通过创建afterMove函数并检查sourceParent长度是否为0来实现这一点。然后,我查看路由,看看是否有空的任务数组,并相应地删除。我想知道这是否是一个有效的解决方案。我还必须删除任务,否则任务订阅会在删除计划任务时添加重复项 第二,也是最重要的一点,基本对象(任务)具有order属性。我想将其绑定到可排序的顺序,这样当任务在计划列表中拖动时,order属性就会更新

这是一个问题的后续行动:

还有两件事我正在努力实现。首先,当一个嵌套列表项被拖到另一个列表中,父项为空时,我想删除父项。我通过创建afterMove函数并检查sourceParent长度是否为0来实现这一点。然后,我查看路由,看看是否有空的任务数组,并相应地删除。我想知道这是否是一个有效的解决方案。我还必须删除任务,否则任务订阅会在删除计划任务时添加重复项

第二,也是最重要的一点,基本对象(任务)具有order属性。我想将其绑定到可排序的顺序,这样当任务在计划列表中拖动时,order属性就会更新。如何从可排序回调访问其他列表项的顺序

请看下面这篇文章


任何帮助都将不胜感激。

对于第一个问题,有一个稍微优化的方法可以做到这一点
arg.sourceParent
包含在要删除的
tasksByRoute
项中。
remove
函数可以对项目运行一个函数。所以,你可以这样写:

self.afterMoveCallback = function(arg) {
    if (arg.sourceParent().length === 0) {
        self.tasksByRoute.remove(function(route) {
           return route.tasks === arg.sourceParent; 
        });
    }
};
self.scheduledTasks = ko.observableArray([
    new Task(8, 4, "Route 4", "Cust 8", 1),
    new Task(9, 4, "Route 4", "Cust 9", 2),
    new Task(10, 5, "Route 5", "Cust 10")
    ]).indexed("order");
对于第二个问题,我真的很喜欢使用一个扩展,它将自动跟踪observableArray中的订单。它看起来像:

//track an index on items in an observableArray
ko.observableArray.fn.indexed = function(prop) {
    prop = prop || 'index';
   //whenever the array changes, make one loop to update the index on each
   this.subscribe(function(newValue) {
       if (newValue) {
           var item;
           for (var i = 0, j = newValue.length; i < j; i++) {
               item = newValue[i];
               if (!ko.isObservable(item[prop])) {
                  item[prop] = ko.observable();
               }
               item[prop](i);  //add 1 here if you don't want it to be zero based
           }
       }   
   }); 

   //initialize the index
   this.valueHasMutated(); 
   return this;
};

下面是一个更新了这两个更改的示例:

答案很好。我知道一定有更好的方法来解决第一个问题。我知道可观察的耳环顺序与排序表匹配。这对我来说很神奇,但是很棒。谢谢你的帮助。非常感谢。