2017-04-19 20 views
1

私は、ジェノとゴードンが開発したアイデアをdc.js multiple select menu with checkboxesで使用しました。具体的には、チェックボックス付きの複数選択メニューです。マルチセレクションボタンは毎回繰り返し使用されます。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()を有効にする回数に応じて。 また、フィルタがグラフに適用されている場合、メニューは更新されません。

解決策はありますか?

は、表示要素を置き換えるためにjQueryを使用すると、常に一種のトリッキーです

答えて

0

ありがとうございます。これは特定の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

関連する問題