0

각도를 사용하여 확인란 변경 이벤트를 구현하려고하지만 확인란을 클릭했을 때 여러 번 이벤트가 실행되는 것을 보려고합니다.각도 - Kendo treeview 확인란 변경 이벤트가 여러 번 실행 됨

나는 plnkr을 만들었습니다. 도와주세요. 이상적으로 그것은 한 번만 해고되어야합니다.

$scope.treeOptions = { 
    checkboxes: { 
    checkChildren: true 
    }, 
    dataBound: function(e) { 
    $scope.attachChangeEvent(e); 

    } 

}; 

이벤트 변경 코드 :

$scope.attachChangeEvent = function(e) { 

    var dataSource = e.sender.dataSource; 
    // issue : change event is getting called multiple times for every click on checkbox 
    dataSource.bind("change", function(e) { 
    var selectedNodes = 0; 

    var checkedNodes = []; 

    $scope.checkedNodeIds(dataSource.view(), checkedNodes); 


    for (var i = 0; i < checkedNodes.length; i++) { 
     var nd = checkedNodes[i]; 
     if (nd.checked) { 
     selectedNodes++; 
     } 
    } 
    // check the console - this is called multiple times for one checkbox click 
    console.log(selectedNodes); 
    }); 
}; 

모든 체크 박스가 업데이트 된 후 하나 개의 이벤트가 발생하도록하기 위해 부착하는 또 다른 이벤트가 있나요? 아니면 모든 '변경'이벤트를 그룹화하고 대신 하나만 실행하는 방법이 있을까요?

답변

1

dataBound 이벤트는 계층 적 데이터 소스 (각 자식 DS가 이벤트를 트리거하고 거품을 일으키기 때문에)가 여러 번 트리거됩니다. 결과적으로 변경 핸들러를 여러 번 바인딩합니다. 대신 initTree 메서드에서 변경 이벤트를 바인딩해야합니다. 미리보기 :

var knobj = new kendo.data.HierarchicalDataSource({ 
    data: arrayObj 
}); 

//setting heirarchial data to scope 
$scope.treeObj = knobj; 
$scope.attachChangeEvent(); 

(updated demo) 또는

, 당신은 dataBound 이벤트를 사용할 수 있습니다 분명히 바인딩이 실행됩니다 마지막으로 (demo)에 대한 undefinede.node을 확인하십시오

dataBound: function(e) { 
    if (!e.node) { 
     $scope.attachChangeEvent(); 
    } 
} 
+0

안녕 라스 - 응답 해 주셔서 감사합니다. 좀 더 많은 문제가있는 것 같습니다. 새로 고침 페이지는 첨부 이벤트를 세 번 호출하는 것입니다. 그리고 때로는 이벤트가 일부 반복을 수행 한 후 두 번 실행되는 경우도 있습니다. – Abhi

+0

당신이 무엇을 의미하는지 모르겠습니다 - 설명하기 위해 데모를 바꿀 수 있습니까? 아니면 재현 할 단계를 줄 수 있습니까? 부모의 모든 자식을 검사하면 데이터 소스 변경 이벤트가 두 번 트리거됩니다.이 경우 부모는 자동으로 두 번째 이벤트를 트리거하는 "checked"로 설정됩니다. –

+0

OK, 사용자가 의미하는 바를 알고 있다고 생각합니다 .- 트리 뷰 초기화 할 때 데이터 소스를 변경하여 변경 이벤트를 트리거합니다. 내 대답에 또 다른 대안을 추가했습니다 –