首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >剔除嵌套的可排序sourceParent.splice不是一个函数

剔除嵌套的可排序sourceParent.splice不是一个函数
EN

Stack Overflow用户
提问于 2016-01-20 07:43:09
回答 2查看 816关注 0票数 0

在这里,我正在编写使用Knockout可排序的代码。它应该深入地显示嵌套的可排序3+级别。

数据被传递给模板,但是一些元素在被删除后返回到它们原来的位置(例如,A,B元素在最上层的上)。

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

错误:

is :244未登录的TypeError: sourceParent.splice不是一个函数 或 is :252unaught TypeError: targetParent.splice不是一个函数

JSFiddle -类似的工作示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var viewModel = function() {
  var self = this;
  self.children = ko.observable([{
    "name": "A",
    "children": [{
      "name": "A1",
      "children": [{
        "name": "A11"
      }, {
        "name": "A12"
      }]
    }, {
      "name": "A2"
    }]
  }, {
    "name": "B",
    "children": [{
      "name": "B1"
    }, {
      "name": "B2"
    }]
  }]);
}
ko.applyBindings(new viewModel());
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ul {
  border: solid 1px green;
  list-style-type: none;
  margin:0px;
}
li {
  padding: 10px;
  border: solid 1px blue;
  margin:0px;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://rawgithub.com/rniemeyer/knockout-sortable/master/build/knockout-sortable.js"></script>

<script id="nodeTmpl" type="text/html">
  <li>
    <!-- ko if: $data.name -->
    <a href="#" data-bind="text: $data.name"></a>
    <!-- /ko -->
    <!-- ko if: $data.children -->
    <ul data-bind="sortable: { template: 'nodeTmpl', data: $data.children }"></ul>
    <!-- /ko -->
  </li>
</script>

<ul data-bind="sortable: { template: 'nodeTmpl', data: $root.children }"></ul>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-20 09:24:41

这个问题是通过更改<ul data-bind="template: { name: 'nodeTmpl', data: $root }"></ul>行来解决的,我从一些引用中删除了$data,因为它导致了错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var viewModel = function() {
    var self = this;
    self.children = [{
    "name": "A",
    "children": [{
      "name": "A1",
      "children": [{
        "name": "A11",
      }, {
        "name": "A12",
      }]
    }, {
      "name": "A2",
    }]
  }, {
    "name": "B",
    "children": [{
      "name": "B1",
    }, {
      "name": "B2",
    }]
  }]
};
ko.applyBindings(new viewModel());     
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js"></script>
<script src="https://rawgithub.com/rniemeyer/knockout-sortable/master/build/knockout-sortable.js"></script>

<script id="nodeTmpl" type="text/html">
  <li>
    <!-- ko if: $data.name -->
    <a href="#" data-bind="text: name"></a>
    <!-- /ko -->
    <!-- ko if: $data.children -->
    <ul data-bind="sortable: { template: 'nodeTmpl', data: children }"></ul>
    <!-- /ko -->
  </li>
</script>

<ul data-bind="template: { name: 'nodeTmpl', data: $root }"></ul>

票数 -1
EN

Stack Overflow用户

发布于 2018-03-09 17:53:14

彼得·格哈特提供的解决方案不正确。问题在于使用的是数组的可观察,而不是observableArray

错误声明sourceParent (它是拖出元素的视图模型上的集合)没有splice函数。这是正确的,一个可观测的没有splice函数,而一个arrayobservableArray有。同样的情况也适用于targetParent (它是将元素拖到的视图模型上的集合)。

要使初始示例正常工作,只需将observable更改为observableArray即可。

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

这里的解决方案是将每个array转换为一个observableArray,以便由sortable-binding更新它们。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var viewModel = function() {
  var self = this;
  self.children = ko.observableArray([{
    "name": "A",
    "children": ko.observableArray([{
      "name": "A1",
      "children": ko.observableArray([{
        "name": "A11"
      }, {
        "name": "A12"
      }])
    }, {
      "name": "A2"
    }])
  }, {
    "name": "B",
    "children": ko.observableArray([{
      "name": "B1"
    }, {
      "name": "B2"
    }])
  }]);
}
ko.applyBindings(new viewModel());
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ul {
  border: solid 1px green;
  list-style-type: none;
  margin: 0px;
}

li {
  padding: 10px;
  border: solid 1px blue;
  margin: 0px;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://rawgithub.com/rniemeyer/knockout-sortable/master/build/knockout-sortable.js"></script>

<script id="nodeTmpl" type="text/html">
  <li>
    <!-- ko if: $data.name -->
    <a href="#" data-bind="text: $data.name"></a>
    <!-- /ko -->
    <!-- ko if: $data.children -->
    <ul data-bind="sortable: { template: 'nodeTmpl', data: $data.children }"></ul>
    <!-- /ko -->
  </li>
</script>

<ul data-bind="sortable: { template: 'nodeTmpl', data: $root.children }"></ul>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34904385

复制
相关文章
函数的嵌套
# 输出:输出我在中国(大函数) 北京(小函数) def func_big(country): def func_small(city): print('我在%s,城市是%s' % (country, city)) func_small('北京') func_small('广州') func_big('中国') def func_big(country, bcity='北京'): def func_small(city): print
汪凡
2018/05/29
1.2K0
JS-比较函数中嵌套函数,可以排序【对象数组】
1 function createCompareFun(propertyName){ 2 return function(object1,object2){ 3 var value1 = object1[propertyName]; 4 var value2 = object2[propertyName]; 5 if(value1>value2){
xing.org1^
2018/05/17
4.9K0
函数嵌套
现在有一个需求,通过给一个函数传参即可求得某个圆的面积或者圆的周长。也就是说把一堆工具丢进工具箱内,之后想要获得某个工具,直接从工具箱中获取就行了。
py3study
2020/01/16
9740
函数嵌套
lambda隐藏函数的嵌套
# 隐藏函数嵌套 f = (lambda a,b :a if a>b else b)(1000, 2000008) print((lambda a,g:a if a > g else g)(2000,f)) # lambda 推导式 l = [lambda x:x**i for i in range(4)] print(l[1](4))
汪凡
2018/05/29
1K0
Elasticsearch聚合的嵌套桶如何排序
在elasticsearch的聚合查询中,经常对聚合的数据再次做聚合处理,例如统计每个汽车品牌下的每种颜色汽车的销售额,这时候DSL中就有了多层aggs对象的嵌套,这就是嵌套桶(此名称来自《Elasticsearch 权威指南》),如下图所示:
程序员欣宸
2019/05/27
4K0
python-函数的对象、函数嵌套、名称
内存存储变量名与变量间的绑定关系的空间(存放变量名的空间),这个空间被称为名称空间。
py3study
2020/01/15
2.3K0
函数(五)(函数的嵌套与递归调用)
C语言的函数定义是互相平行和独立的,但函数的调用是可以嵌套的,也就是说,在调用一个函数的过程中,又去调用另外一个函数。
pigeon
2022/04/11
1.6K0
函数(五)(函数的嵌套与递归调用)
Python嵌套函数与匿名函数
函数的嵌套调用是在"函数调用中再调用其他函数"。也就是说:函数嵌套允许在一个函数中调用另外一个函数。如下: name = "Forest" def change(): name = "Forest1" def change2(): # global name 如果声明了这句,下面的name改的是最外层的全局变层 name = "Forest2" #这句注释掉的话,则打印Forest1 print("第3层打印", name)
Yuou
2022/09/26
4920
javascript当中嵌套函数
3)嵌套函数 例 3.3.1 <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> </head> <script> function outerFun(){ var i = 0; function innerFun(){ document.write(i); } innerFun(); } outerFun(); /*here you can not call innerFun(), because it is inside another function outerFun, so it will cause error.*/ innerFun(); document.write("马克-to-win"); </script>
马克java社区
2019/10/05
4780
javascript当中嵌套函数
【学习】excel函数嵌套
1. 前言: 相信很多学习EXCEL的同伴都会时常将一句话挂在嘴边: “请老师教我下这个公式怎么写?” 要么就是: “老师太牛了,这么厉害的嵌套您是怎么写出来的,能不能教教我?” 说实话,我也被这样问过几次,虽说自己函数学的也不怎么样,但是对于这样的问题,我实在不知如何回答,更谈不上“教”这么神圣的动作。 …… 在我看来(至少我是这么认为的),学习EXCEL不是单纯的了解函数。 了解函数只是工具,更重要的是如何分析问题,写EXCEL公式不是函数记忆大比拼,而是逻辑思维的较量。 …… 可能这样说,只会让一些
小莹莹
2018/04/18
1.1K0
【学习】excel函数嵌套
python_字典列表嵌套的排序问题
上一篇我们聊到python 字典和列表嵌套用法,这次我们聊聊字典和列表嵌套中的排序问题,这个在python基础中不会提到,但实际经常运用,面试中也喜欢问,我们娓娓道来。
钢铁知识库
2022/08/20
3.8K0
排序优化:如何实现一个通用的、高性能的排序函数?
如果要实现一个通用的、高效率的排序函数,我们应该选择哪种排序算法?我们先回顾一下前面讲过的几种排序算法。
acc8226
2022/05/17
6020
排序优化:如何实现一个通用的、高性能的排序函数?
视锥剔除优化
1. 基本相交测试. 只需要测试包围盒的两个角(这个几乎所有人都做了) 2. 平面连续测试. 根据上次测试的结果来优化用于测试的平面顺序 3. 八分体测试. 对于对称的视锥体可以减少一半的测试 4. 父子测试. 对于有父子关系的包围盒, 父在内则子在内, 父在外则子在外, 父相交则需要递归测试(四叉/八叉之类的肯定也做过了) 5. 变换连续测试. 根据移动和旋转的方向来优化测试. 如上一帧在外的处于移动方向的相反方向的话, 这帧肯定也在外面. 6. 雷达测试(Gems5). 适用于包围体为球形的情况. R
逍遥剑客
2018/05/23
1.2K0
C语言:函数的嵌套与递归
在C语言中,所有函数都是相互平行,且相互独立的。在定义函数时,一个函数内不能再定义另一个函数,不能嵌套定义,但是可以嵌套使用。
岳泽以
2022/10/26
8400
C语言:函数的嵌套与递归
Python函数嵌套定义的洪荒之力
本文重点在于:Python允许函数的嵌套定义,这在有些情况下会带来很多方便。 感谢中国石油大学(华东)计算机与通信工程学院李昕老师提供问题。 假设有个列表,内容如下: >>> x = list(range(20)) >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 现在我们想得到一个新列表,其中每个值都是x中元素值加5,这很容易用Python内置函数map()实现,例如: >>> list(map(lam
Python小屋屋主
2018/04/16
1.1K0
Python嵌套函数 闭包
这也很好理解,在函数outer中定义了另外一个函数inner,而inner也必须在outer中被调用才能执行。
猫叔Rex
2022/01/24
9800
sql 聚合函数嵌套使用[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151848.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/24
1.4K0
sql 聚合函数嵌套使用[通俗易懂]
python3--嵌套函数
# Auther: Aaron Fan # 嵌套函数 # 定义: # 在一个函数体内,用def重新定义新的函数,才叫嵌套函数 # 示例1:  #属于嵌套函数 def foo():    print("in the foo")    def bar():        print("in the bar")    bar() foo() #而这种就不属于嵌套函数: #def test1(): #    test2() #test1()
py3study
2020/01/06
7460
Matlab系列之函数嵌套
昨天的那一篇讲的几个函数,不知道你们理解的如何,是否懂得怎么去使用了,如果还没懂,一定要再多看几遍,并且去在软件上进行实操,今天的话,将要介绍一下函数的嵌套,不过在正式讲嵌套之前,先对主函数和子函数做下了解。
狂人V
2020/07/14
1.4K0
Matlab系列之函数嵌套
点击加载更多

相似问题

可剔除的可排序的元件

12

剔除嵌套排序列表

11

可剔除的可排序表-空置的tbody

26

jQuery可排序不是一个函数

50

在可排序父列表中剔除可排序列表

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文