多选按钮每次重复使用 dc.renderAll
The multiselect button repeats every time use dc.renderAll
我使用了 Jeno 和 Gordon 在 开发的想法,特别是 dc.js 带有复选框的多个 select 菜单。
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()(在重置所有按钮和页面大小更改时)时,都会复制相同的 multiselect 按钮,克隆到旁边按钮等取决于Enable renderAll()的次数。
此外,如果将筛选器应用于图表,则菜单不会更新。
你能想出解决办法吗?
谢谢
使用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));
但是,我使用的代码版本比您上面粘贴的代码版本要旧,因为我 运行 使用替换过滤器进行无限递归并重绘所有逻辑。所以这不是一个完整的解决方案,因为它不会复制并且会更新,但它会在前面问题中的几个问题上倒退。
我使用了 Jeno 和 Gordon 在
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()(在重置所有按钮和页面大小更改时)时,都会复制相同的 multiselect 按钮,克隆到旁边按钮等取决于Enable renderAll()的次数。 此外,如果将筛选器应用于图表,则菜单不会更新。
你能想出解决办法吗?
谢谢
使用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));
但是,我使用的代码版本比您上面粘贴的代码版本要旧,因为我 运行 使用替换过滤器进行无限递归并重绘所有逻辑。所以这不是一个完整的解决方案,因为它不会复制并且会更新,但它会在前面问题中的几个问题上倒退。