我使用了Jeno和Gordon在dc.js multiple select menu with checkboxes开发的想法,特别是带有复选框的dc.js多选菜单。
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()(在重置所有按钮和页面大小更改时)都会复制相同的多选按钮,克隆在按钮旁边等等,具体取决于多少times启用renderAll()。 此外,如果将过滤器应用于图表,则不会更新菜单。
你能想到一个解决方案吗?
感谢
答案 0 :(得分: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));
但是,我正在使用比上面粘贴的旧版本的代码,因为我使用替换过滤器运行无限递归并重新绘制所有逻辑。所以它不是一个完整的解决方案,因为它不会重复并且确实会更新,但它会在早期问题中的几个问题上倒退。