私はknockoutJSを使用してツリービューを作成していますが、ツリーからいくつかのノードを削除するのにいくつか問題があります。私はなぜ、私の機能はノードを見つけるためにすべてのツリーをチェックしていない、最初のブランチだけを確認していません。ツリーからノードを削除する機能は次のとおりです。TreeViewからノードを削除します
var ViewModel = function(){
\t self = this;
\t self.data = ko.mapping.fromJS(data.items);
\t
\t
\t self.removerItem = function(item){
\t \t debugger;
\t \t self.Remover(self.data,item);
\t }
\t
\t self.Remover = function(data,item){
\t \t debugger;
\t \t
\t \t for(i = 0; i < data().length; i++){
\t \t \t
\t \t \t if(item.CategoryId == data()[i].CategoryId){
\t \t \t \t debugger;
\t \t \t \t data.remove(item);
\t \t \t \t return;
\t \t \t }
\t \t \t else{
\t \t \t \t debugger;
if(data()[i].items() != null && data()[i].items() != undefined && data()[i].items().length > 0)
\t arguments.callee(data()[i].items,item);
\t \t \t
\t \t \t }
\t \t \t \t
\t \t }
\t } \t
}
var data = {
items: [{
\t \t "CategoryId": 65,
"name": "MORPHED",
"items": [{
"name": "5 Day",
"items": [{
"CategoryId": 20,
"name": "30 day countdown"
}, {
"CategoryId": 19,
"name": "Staffing your program"
}, {
"CategoryId": 22,
"name": "Emergency/Medical Information"
}, {
"CategoryId": 18,
"name": "Promoting your program"
}, {
"CategoryId": 21,
"name": "Week of camp"
}]
}, {
\t \t \t "CategoryId": 245,
"name": "47 Day",
"items": []
}, {
\t \t \t "CategoryId": 222,
"name": "1/27 Day",
"items": []
}, {
\t \t \t "CategoryId": 2222,
"name": "Age Targeted",
"items": []
}]
}, {
"name": "CREATE",
"items": [{
\t \t \t "CategoryId": 2567,
"name": "15 Day",
"items": []
}, {
\t \t \t "CategoryId": 22245,
"name": "4 Day",
"items": []
}, {
\t \t \t "CategoryId": 2289787,
"name": "1/2 Day",
"items": []
}]
}]
};
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.js"></script>
<ul style="list-style-type:none" data-bind="template: { name: 'itemTmpl', foreach: data }"></ul>
<script id="itemTmpl" type="text/html">
<li>
\t \t <div class="panel panel-default" style="margin: 0 0 0 0; padding: 0 0 0 0; border-radius:0">
\t \t \t <div class="panel-heading" style="background-color: white">
\t \t \t \t <a>
\t \t \t \t \t <span class="glyphicon glyphicon-plus"></span> \t \t \t \t \t </a>
\t \t \t \t <a data-bind="text: name"></a>
\t \t \t \t <a class="pull-right" data-bind="click: $root.removerItem"><span class="glyphicon glyphicon-remove"></span></a>
\t \t \t </div>
\t \t \t <div class="panel-body" style="margin: 0 0 0 0; padding: 0 0 0 0 " >
\t \t \t \t <ul style="list-style-type:none" data-bind="template: { name: 'itemTmpl', foreach: $data.items }"></ul>
\t \t \t </div>
\t \t \t
\t \t </div>
</li>
</script>
とhere同じコードであるが、jsfiddleです。
私たちは、あなたが少しもある(ここで投稿したコードの間で何かが必要です問題を再現するのに少し)とjsfiddle(これは少し問題あり、問題に関係のないものを含んでいます)。 [mcve]を作成して質問*に含めるようにしてください。リンクや外部リソースが壊れても、同じ問題を持つ将来の訪問者には*と*簡単にお答えします。 – Jeroen
@Jeroen申し訳ありませんが、今はそれが良いと思います。 – Guto