Javascript 从树视图中删除节点

Javascript 从树视图中删除节点,javascript,knockout.js,treeview,Javascript,Knockout.js,Treeview,我正在使用knockoutJS创建一个treeview,在从de-tree中删除一些节点时遇到了一些问题。我不知道为什么,但是我的函数没有检查所有的树来找到一个节点,只有第一个分支。下面是我从de树中删除节点的函数 var ViewModel=function(){ self=这个; self.data=ko.mapping.fromJS(data.items); self.item=功能(项目){ 调试器; 自卸除器(自卸除器数据、项目); } self.Remover=功能(数据,项目){

我正在使用knockoutJS创建一个treeview,在从de-tree中删除一些节点时遇到了一些问题。我不知道为什么,但是我的函数没有检查所有的树来找到一个节点,只有第一个分支。下面是我从de树中删除节点的函数

var ViewModel=function(){
self=这个;
self.data=ko.mapping.fromJS(data.items);
self.item=功能(项目){
调试器;
自卸除器(自卸除器数据、项目);
}
self.Remover=功能(数据,项目){
调试器;
对于(i=0;i0)
参数。被调用方(数据()[i]。项,项);
}
}
}	
}
风险值数据={
项目:[{
“类别”65,
“名称”:“变形”,
“项目”:[{
“名称”:“5天”,
“项目”:[{
“类别”:20,
“名称”:“30天倒计时”
}, {
“类别”:19,
“名称”:“为您的程序配备人员”
}, {
“类别”:22,
“名称”:“紧急/医疗信息”
}, {
“类别”:18,
“名称”:“推广您的计划”
}, {
“类别”21,
“名称”:“营周”
}]
}, {
“类别”245,
“名称”:“47天”,
“项目”:[]
}, {
“类别”222,
“名称”:“1/27天”,
“项目”:[]
}, {
“类别ID”:2222,
“姓名”:“目标年龄”,
“项目”:[]
}]
}, {
“名称”:“创建”,
“项目”:[{
“类别ID”:2567,
“名称”:“15天”,
“项目”:[]
}, {
“类别”22245,
“名称”:“4天”,
“项目”:[]
}, {
“类别ID”:2289787,
“名称”:“1/2天”,
“项目”:[]
}]
}]
};
var viewModel=新的viewModel();
应用绑定(视图模型)

  • 数据绑定=“模板:{name:'itemTmpl',foreach:$data.items}>

  • 你的帖子有一个重排,这很好,但仍有很多事情让人难以理解,其中包括:

    • 所有与问题无关的样式和引导程序
    • 超出问题所需的数据量(项目及其属性)
    • 大量笨拙的间距使得代码难以阅读
    • 到处都是
      调试器
      语句
      
    除此之外,还有一些代码审查意见:

    • 您没有将
      var
      self
      一起使用,因此它是一个隐式全局变量
    • 如果使用
      参数使事情过于复杂。被调用方
      等等,只需使用内置的
      indexOf
      remove
      方法
    • 通过使用
      self.data
      ,实际上是一个项目列表,然后通过使用
      ko.mapping
      将同一事物命名为
      items
      ,使事情变得复杂
    • 您正在公开
      删除程序
      ,它可能是一个私有函数
    • 您使用的是大写(因此隐含了构造函数)名词(“Remover”),而小写动词(“remove”)更有意义
    下面是一些有效的方法,上面的所有内容都已更改/修复:

    var ViewModel=函数(数据){
    var self=这个;
    self.items=ko.mapping.fromJS(data.items);
    self.removietem=函数(toDeleteItem){
    移除(toDeleteItem、self.items);
    }
    函数删除(toDeleteItem、itemsObsArray){
    如果(!itemsObsArray){return false;}
    如果(itemsObsArray().indexOf(toDeleteItem)>=0){
    itemsObsArray.remove(toDeleteItem);
    返回true;
    }否则{
    var items=itemsObsArray();
    对于(变量i=0;i
    
    
    

      • 你的帖子有一个重排,这很好,但仍有很多事情让人难以理解,其中包括:

        • 所有与问题无关的样式和引导程序
        • 超出问题所需的数据量(项目及其属性)
        • 大量笨拙的间距使得代码难以阅读
        • 到处都是
          调试器
          语句
          
        除此之外,还有一些代码审查意见:

        • 您没有将
          var
          self
          一起使用,因此它是一个隐式全局变量
        • 如果使用
          参数使事情过于复杂。被调用方
          等等,只需使用内置的
          indexOf
          remove
          方法
        • 您使用了
          self.data
          ,这实际上是一个列表,使事情变得复杂