2017-04-19 77 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