Knockout.js 敲除嵌套可排序sourceParent.splice不是函数

Knockout.js 敲除嵌套可排序sourceParent.splice不是函数,knockout.js,knockout-2.0,knockout-3.0,knockout-sortable,knockout-templating,Knockout.js,Knockout 2.0,Knockout 3.0,Knockout Sortable,Knockout Templating,在这里,我正在编写使用敲除排序表的代码。它应该显示嵌套的排序表3+深度级别 数据被传递到模板,但某些元素在被删除后会返回其原始位置(例如,最上层的A、B元素) 我应该如何配置嵌套的排序表,以便在没有错误的情况下也可以使用最高层 错误: knockout sortable.js:244未捕获类型错误:sourceParent.splice不是函数 或 knockout sortable.js:252未捕获类型错误:targetParent.splice不是函数 var viewModel=fu

在这里,我正在编写使用敲除排序表的代码。它应该显示嵌套的排序表3+深度级别

数据被传递到模板,但某些元素在被删除后会返回其原始位置(例如,最上层的A、B元素)

我应该如何配置嵌套的排序表,以便在没有错误的情况下也可以使用最高层

错误:

knockout sortable.js:244未捕获类型错误:sourceParent.splice不是函数

knockout sortable.js:252未捕获类型错误:targetParent.splice不是函数

var viewModel=function(){
var self=这个;
self.children=ko.observable([{
“姓名”:“A”,
“儿童”:[{
“名称”:“A1”,
“儿童”:[{
“名称”:“A11”
}, {
“名称”:“A12”
}]
}, {
“名称”:“A2”
}]
}, {
“名称”:“B”,
“儿童”:[{
“名称”:“B1”
}, {
“名称”:“B2”
}]
}]);
}
应用绑定(新的viewModel())
ul{
边框:实心1px绿色;
列表样式类型:无;
边际:0px;
}
李{
填充:10px;
边框:纯色1px蓝色;
边际:0px;
}


      • 通过更改行
          $data
        ,因为这是导致错误的原因

        var viewModel=function(){
        var self=这个;
        self.children=[{
        “姓名”:“A”,
        “儿童”:[{
        “名称”:“A1”,
        “儿童”:[{
        “名称”:“A11”,
        }, {
        “名称”:“A12”,
        }]
        }, {
        “名称”:“A2”,
        }]
        }, {
        “名称”:“B”,
        “儿童”:[{
        “名称”:“B1”,
        }, {
        “名称”:“B2”,
        }]
        }]
        };
        应用绑定(新的viewModel())
        
        
        
        • 提供的解决方案不正确。 问题在于使用的是数组的,而不是

          该错误表示
          sourceParent
          (该集合位于从中拖动图元的viewmodel上)没有
          splice
          功能。这是正确的,一个可观察对象没有
          拼接
          功能,而
          数组
          可观察阵列
          有。这同样适用于
          targetParent
          (它是viewmodel上元素被拖动到的集合)

          要使初始示例正常工作,只需将
          observable
          更改为
          observableARay

          但是,正如您在原始示例和提供的解决方案中所注意到的,即使没有抛出错误,它仍然不能真正正常工作。您会注意到,在拖动元素时,元素要么根本不移动,要么消失

          这里的解决方案是将每个
          数组
          转换为一个
          可观察数组
          ,这样它们就可以通过
          可排序
          -绑定进行更新

          var viewModel=function(){
          var self=这个;
          self.children=ko.array([{
          “姓名”:“A”,
          “儿童”:柯·艾雷([{
          “名称”:“A1”,
          “儿童”:柯·艾雷([{
          “名称”:“A11”
          }, {
          “名称”:“A12”
          }])
          }, {
          “名称”:“A2”
          }])
          }, {
          “名称”:“B”,
          “儿童”:柯·艾雷([{
          “名称”:“B1”
          }, {
          “名称”:“B2”
          }])
          }]);
          }
          应用绑定(新的viewModel())
          
          ul{
          边框:实心1px绿色;
          列表样式类型:无;
          边际:0px;
          }
          李{
          填充:10px;
          边框:纯色1px蓝色;
          边际:0px;
          }
          
          

            • 提供的代码段仍然无法工作。当错误消失时,拖动会使图元不移动或完全消失。我已经发布了一个解决这些问题的答案。此外,删除
              $data
              块也是不必要的。