Benutzerdefinierter Textfilter für DC.js dataTable

8

Ich baue ein Dashboard, um einige Daten anzuzeigen. Ich habe mehrere Diagramme und eine Tabelle, die alle Daten auflistet. 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 Firmen angezeigt, die mit "Appl" beginnen, und die Diagramme werden dies widerspiegeln.

Das einzige Problem, das ich bei der aktuellen Implementierung habe, ist, wenn ich diesen Filter ändere oder ihn lösche. Die Daten scheinen gut zu sein, aber die Diagramme werden falsch dargestellt. 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ürden geschätzt.

%Vor%

dc.js code

%Vor%

Das ist es, die Diagramme filtern nur mit verschiedenen Dimensionen auf dem gleichen Crossfilter-Objekt.

Ich habe versucht, einige Dinge mit der Funktion text_filter zu tun, zB dim.filterAll() , dim.filter(null) , dc.renderAll() . Wenn ich die Daten in der Dimension überprüfe, ist es vor und nach jedem Filter korrekt, die anderen Diagramme scheinen es nicht korrekt zu handhaben.

Ich habe versucht, der dc-dataTable direkt einen Basisfilter hinzuzufügen, aber ich kann nicht mit einer benutzerdefinierten Filterfunktion arbeiten. Also kann ich etwas wie dashTable.filter(q) machen und es wird funktionieren, aber ich muss ihm den gesamten Firmennamen geben, damit alles angezeigt wird, aber die Diagramme werden korrekt dargestellt, wenn ich sie anwende und sie lösche. Ich habe versucht, dashTable.filterHandler() verwenden, aber es gibt immer einen Fehler zurück, aber wenn Sie wissen, wie das funktioniert, würde ich neugierig sein, weil ich es nicht mit dem Beispiel in dc.js Dokumentation funktionieren konnte.

Jede Hilfe würde sehr geschätzt werden.

BEARBEITEN:

Hier ist eine Geige des größtenteils vollständigen Codes, ich habe irgendeinen Code zusammengewürfelt, damit er funktioniert. Ссылка

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 der Gesamtwert nicht korrekt zurückgesetzt wird.

    
rbristow 01.08.2014, 15:15
quelle

1 Antwort

8

In diesem Block:

%Vor%

Ihr Filter muss sein:

%Vor%

Aber Sie wenden keinen Filter auf dim an, wenn q == '' , so sollte es

sein %Vor%

Erläuterung:

In crossfilter.js wird der Rückgabewert Ihres Filterrückrufs wie folgt getestet:

%Vor%

Wenn der Filter true zurückgibt und das Element bereits in der aktuellen Ansicht ist, sollte es nichts tun. true ^ true -> false .

Aber in Ihrem Fall wird true mit einer Zeichenkette xor-ed - Anmerkung, das ist bitweise xor, nicht logisch, da Javascript keinen logischen xor hat - der immer zu einem true -Wert ausgewertet wird. Daher werden die Werte, die Sie in Ihrer gefilterten Menge haben möchten, in added eingefügt, wenn sie in Ruhe gelassen werden sollen.

Es ist ein merkwürdiger Gebrauch eines bitweisen Xors. Ich habe das auf SO nachgeschlagen, und die beste Antwort auf Warum gibt es keine? logisches xor in JavaScript? enthält "Bitwise XOR ist extrem nützlich, aber in all meinen Jahren der Programmierung habe ich nie ein logisches XOR benötigt." Angesichts der Tatsache, dass crossfilter.js die Leistung betont, lassen sie vielleicht einige Fehlerprüfungen fallen und wollen schnelle "mathy" -Operationen verwenden.

    
Jason S 05.08.2014, 00:25
quelle