每次使用dc.renderall时,多选择按钮都会重复



我使用了Jeno和Gordon在dc.js多重选择菜单上带有复选框的想法,特别是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(((在一个重置全按钮和页面大小变化时(复制相同的多选择按钮,在按钮旁边克隆克隆,等等,依次取决于多少时代启用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));

但是,我正在使用比上面粘贴的较旧版本的代码,因为我遇到了替换过滤器和重新绘制所有逻辑的无限递归。因此,这不是一个完整的解决方案,因为它没有复制并且确实更新,但是它在早期问题中的一些问题上进行了回归。

小提琴:https://jsfiddle.net/gordonwoodhull/lghj8ztj/32/

最新更新