Javascript 从树视图中删除节点
我正在使用knockoutJS创建一个treeview,在从de-tree中删除一些节点时遇到了一些问题。我不知道为什么,但是我的函数没有检查所有的树来找到一个节点,只有第一个分支。下面是我从de树中删除节点的函数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=功能(数据,项目){
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
,这实际上是一个列表,使事情变得复杂