Benutzerdefinierter Textfilter für DC.js-Datentabelle

Ich erstelle ein Dashboard, um einige Daten anzuzeigen. Ich habe mehrere Diagramme und eine Tabelle mit allen Daten. Ich versuche, Suchfunktionen hinzuzufügen, um das Diagramm zu filtern. Ich habe eine Reihe von Unternehmen und einige Daten zu jedem. Wenn ich also nach "Appl" suche, werden nur Unternehmen, die mit "Appl" beginnen, in der Datentabelle aufgeführt, und die Diagramme geben dies wieder.

Das einzige Problem mit der aktuellen Implementierung ist, wenn ich diesen Filter ändere oder lösche. Die Daten scheinen in Ordnung zu sein, aber die Diagramme werden falsch gerendert. Sie kehren nicht zu ihren ursprünglichen Positionen zurück, wenn sie gelöscht werden, oder sie fügen irgendwie zusätzliche Daten hinzu. Irgendwelche Tipps wäre dankbar.

 $("#table-search").on('input',function(){
   text_filter(companyDimension,this.value);//companyDimension is the dimension for the data table

function text_filter(dim,q){
 dashTable.filterAll();
 var re = new RegExp(q,"i")
 if (q!='')
 {
    dim.filter(function(d){
        if (d.search(re)==0)
            return d;
    });
}
dc.redrawAll();
graphCustomizations();  }});

dc.js code

var ndx = crossfilter(resource_data);
//Dimensions 
companyDimension = ndx.dimension(function(d){
    return d["Company Name"]
});
dashTable.width(800).height(800)
    .dimension(companyDimension)
    .group(function(d){
        return "List of all Selected Companies";
    })
    .size(1774)
    .columns([
            function(d){return d["Company Name"]; },
            function(d){return d["Revenue Source"];},
            function(d){return d["Commodity"];},
            function(d){return "$"+parseFloat(d["Revenue"]).formatMoney(0,'.',',');}
        ])
    .sortBy(function(d){return d["Company Name"]})
    .order(d3.ascending);

Das war es auch schon, die Diagramme filtern nur mit unterschiedlichen Dimensionen auf demselben Crossfilter-Objekt.

Ich habe versucht, einige Dinge mit der Funktion text_filter zu tun, wie zum Beispiel:dim.filterAll(), dim.filter(null), dc.renderAll(). Wenn ich die Daten in der Bemaßung inspiziere, sind sie vor und nach jedem Filter korrekt. Die anderen Diagramme scheinen sie einfach nicht richtig zu behandeln.

Ich habe versucht, der DC-Datentabelle direkt einen Basisfilter hinzuzufügen, kann ihn jedoch nicht mit einer benutzerdefinierten Filterfunktion zum Funktionieren bringen. Also kann ich sowas machendashTable.filter(q) und es wird funktionieren, aber ich muss ihm den gesamten Firmennamen geben, damit alles angezeigt wird, aber die Diagramme werden korrekt wiedergegeben, wenn ich es anwende und entferne. Ich habe versucht mitdashTable.filterHandler() es gibt aber immer einen Fehler zurück, aber wenn Sie wissen, wie man das zum Laufen bringt, wäre ich neugierig, weil ich es selbst mit dem Beispiel in der Dokumentation von dc.js nicht zum Funktionieren bringen konnte.

Jede Hilfe wäre sehr dankbar.

BEARBEITEN:

Hier ist eine Fummelei mit dem größtenteils vollständigen Code. Ich habe einen Code zusammengebastelt, damit er funktioniert.http://jsfiddle.net/rbristow/HW52d/1/

Um den Fehler zu reproduzieren, geben Sie einen Buchstaben in das Suchfeld ein, löschen Sie ihn und geben Sie einen anderen Buchstaben ein. Sie können sehen, dass die Summe nicht richtig zurückgesetzt wird.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage