2016-05-30 5 views
0

Ich benutze das Plugin jQuery Datentabellen (https://datatables.net/).Aurelia: Daten verschwinden in der Tabelle bei der Verwendung von DataTables jquery plugin

Sie können es auf einer HTML-Tabelle wie folgt verwenden:

$("#table").DataTable(); 

Wenn ich eine normale HTML-Tabelle in meiner Ansicht haben und die oben in der attached() Methode meiner Ansicht Modell fein funktioniert alles nennen.

Aber Dinge gehen schief, wenn ich dies beim Generieren der Tabelle aus Daten versuchen, die ich von meiner API bekomme.

Die Tabelle wird generiert, aber darunter, statt etwas wie "zeige 0 bis 10 von 93 Einträgen" sagt es "zeigt 0 bis 0 von 0 Einträgen". Wenn ich versuche, die Tabelle nach einer bestimmten Spalte zu sortieren, verschwinden alle Daten und es bleiben nur die Spaltenüberschriften übrig.

UPDATE: Ich verwende keine Ajax-Aufrufe zum Sortieren der Tabelle. Ich erstelle meine Tabelle aus den Daten, die ich von meinem Server erhalte. Zur Erläuterung: Ich bekomme ein JSON-Objekt vom Server. Verwenden Sie das json-Objekt, um die Tabelle mit "repeat.for = 'row of tableData'" zu erstellen. Der Aufruf der .DataTable() in angehängten Hook erstellt das Problem. Ich habe versucht, eine einfache Schaltfläche zu erstellen, die die .DataTable() -Methode aufruft, wenn Sie darauf klicken. Es erstellt die Tabelle ordnungsgemäß. Scheint wie ein Problem mit dem Aufruf in den beigefügten() Haken

+1

was ist eine jquery? –

+0

Ich sehe nicht viel Sinn mit Datenträgern, wenn Sie Aurelia Bindung haben. Ich würde lieber 'repeat.for' verwenden, um die Zeilen zu generieren. Mit Aurelia können Sie beliebige Funktionen von Databases erstellen. Das ist nur meine Meinung –

+0

Ich benutze repeat.for, um meine Tabelle zu generieren. Databases gibt es für Live-Suche, Tabellenumbruch. Ich kann es bauen, sicher, aber die Frage hier ist, warum es nicht funktioniert, wie es sollte –

Antwort

0

Sie werden eine custom element für Ihr DataTable-Objekt erstellen möchten. Wahrscheinlich werden Sie ein custom binding auf Ihrem DataTable-Element verwenden, wo Sie die Daten übergeben. Zu guter Letzt möchten Sie eine Art Refresh- oder Teardown/Buildup-Funktion auf Ihrem DataTable-Plugin im "valueChanged" -Rückruf der rows-Bindung aufrufen.

dataTable.js

@inject(Element) 
export class DataTableCustomElement { 

    element; 
    @bindable rows; 

    constructor(Element) { 
     this.element = $(Element); 
    } 

    rowsChanged(newValue, oldValue) { 
     this.element.DataTable.refresh(); // or whatever it is 
    } 
} 

view.html

<data-table rows.bind="data.rows"></data-table> 

ich etwas über Ihre Datatable-API weiß nicht. Es wurde möglicherweise nicht entwickelt, um mit neuen Daten umzugehen, die vom Server kommen. Ich überlasse das dem Leser.

+0

Ich verwende keine AJAX-Aufrufe zum Sortieren der Tabelle. Ich erstelle meine Tabelle aus den Daten, die ich von meinem Server erhalte. Ausarbeiten: –

+0

Frage aktualisiert –

2

Ich stimme MJ zu, aber Sie können mit Zeitproblemen verfallen.

Aurelia verwendet ein Asynchron-Bindungssystem, das DOM Aktualisierungen der Mikro Task-Warteschlange, um Batch-Warteschlangen sie aus Performance-Gründen (das ist, warum es so schnell ist)

Sie könnten die folgende versuchen, die jede Wiederholung in der Theorie erlauben sollte Bindungen, die vor der Initialisierung Ihrer Datentabellen verarbeitet werden sollen.

import {TaskQueue} from 'aurelia-framework'; 

@inject(Element, TaskQueue) 
export class DataTables { 
    constructor(element, taskQueue) { 
    this.element = element; 
    this.taskQueue = taskQueue; 
    } 

    attached() { 
    this.taskQueue.queueMicroTask(() => { 
     // Init data tables here 
    }); 
    } 
} 
+0

Problem bleibt bestehen. Mein Problem ist nicht, dass die Daten nicht in der Tabelle angezeigt werden. Es ist. Aber zum Beispiel gibt es eine Nachricht mit "keine Daten in der Tabelle verfügbar" unten, aber die Daten sind da. Aber die Sekunde, in der ich versuche, eine Spalte zu sortieren oder alle Daten zu durchsuchen, verschwindet. Irgendwelche anderen Vorschläge? –

+0

Ah Entschuldigung, ich bin mir sicher, dass mir das gut geht, hier ist ein Gedanke, hast du irgendwelche benutzerdefinierten Element-Tags, die du selbst geschlossen hast? Alle nicht standardmäßigen HTML-Tags müssen ein explizites schließendes Tag haben und dürfen nicht selbstschließend sein, dies kann merkwürdiges Verhalten verursachen. – Charleh

+0

Überprüfen Sie auch, ob Sie thead und tbody korrekt erstellt haben, wie ich glaube, Datentabellen sind wählerisch, wie das DOM aussieht, bevor es das erstellt Tabelle – Charleh