2017-04-19 5 views
1

나는 dc.js multiple select menu with checkboxes에서 Jeno와 Gordon이 개발 한 아이디어를 사용했습니다. 특히 확인란이있는 여러 개의 선택 메뉴가 있습니다.multiselect 버튼을 사용할 때마다 반복됩니다. dc.renderAll

selectField.on('postRender', function() { 
$('#menuselect select').change(function(){ 
    console.log($(this).val()) 
    if ($(this).val() && $(this).val() != "") { 
    selectField.replaceFilter([$(this).val()]); 
    } else { 
    selectField.filterAll(); 
    } 
    dc.events.trigger(function() { 
    dc.redrawAll(); 
    }); 
}).multipleSelect({ placeholder: "Select Country"}) 
}); 

내가 가진 문제는 때마다 내가 (리셋에서 모든 버튼을 때 페이지 크기 변경) 같은 다중 선택 버튼을 복사, 옆에있는 버튼 등 복제를 dc.renderAll()를 사용한다는 것입니다 렌더링 횟수에 따라 renderAll()을 사용합니다. 또한 필터가 차트에 적용된 경우 메뉴가 업데이트되지 않습니다.

해결책이 있습니까? 디스플레이 요소를 대체하기 위해 jQuery를 사용

감사

답변

0

항상 가지 까다 롭습니다. 이 요소는 특정 select 요소에 첨부 될 수 있으며 렌더링 중에 바뀌면 새 메뉴가 만들어집니다.

처리 충분히 쉽게하는 렌더링 할 때 단지 오래된 메뉴를 제거하고 다시 그리기 수행 할 때 또한 컨트롤을 새로 고침 : 그러나

function re_jmulti(clear) { 
    return function() { 
    if(clear) 
     selectField.selectAll('.ms-parent.dc-select-menu').remove(); 
    $('#menuselect select') 
    .change(function() { 
     console.log($(this).val()); 
     //selectField.replaceFilter($(this).val()); // why? 
    }) 
    .multipleSelect({ 
     placeholder: "Select Country" 
    }); 
    }; 
} 

selectField.on('postRender', re_jmulti(true)); 
selectField.on('postRedraw', re_jmulti(false)); 

을, 나는 당신보다 코드의 이전 버전과 함께하고 있어요 위의 붙여 넣기, 대체 필터를 사용하여 무한 재귀로 실행하고 모든 논리를 다시 그리기 때문에. 따라서 중복되지 않고 업데이트되기 때문에 완전한 해결책은 아니지만 이전 질문에서 두 가지 문제를 회귀합니다.

바이올린 : https://jsfiddle.net/gordonwoodhull/Lghj8ztj/32/

+0

감사합니다. – ajey2987

+0

확실한 것! 당신이 회귀가없는 결합 된 해결책을 찾으면 어딘가에 코드를 게시 할 수 있습니다. 나는 그것이 다른 사람들을 도울 것이라고 확신한다. – Gordon