2017-04-19 31 views
1

我使用了由Jeno和Gordon在dc.js multiple select menu with checkboxes開發的想法,特別是dc.js帶有複選框的多選菜單。多重選擇按鈕每次重複使用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()多少次。 此外,如果將過濾器應用於圖表,則菜單不會更新。

你能想出一個解決方案嗎?

感謝

回答

0

使用jQuery替換顯示元素總是有點棘手。它看起來像這個可能會附加到特定的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