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