Display spinner, während Datentabellen Tabelle lädt Ruby on Rails
Mit Schienen ich gebaut habe, eine web-app. Eine der Seiten der web-app zeigt eine Tabelle, die verwendet die DataTables-API. Diese JSFiddle zeigt ein Beispiel von dem, was meine web-app aussieht.
Das problem mit diesem ist, dass, wenn ich beginnen, fügen Sie in großen Mengen von Daten (aktuelle Testdaten 1500 Zeilen) in der Tabelle lädt jeden ersten Zeile vor dem ausführen der javascript-das heißt, Sie erhalten eine Tabelle unformatiert für ein paar Sekunden, bevor Sie die Javascript-kicks in und DataTables aktiviert.
Ich würde gerne Anzeige ein spinner, oder verarbeiten der Nachricht (etwas entlang jenen Linien) an die Stelle der Tabelle, bis die Seite vollständig aufgefüllt wurde, sobald diese beendet ist möchte ich mein javascript aktivieren DataTables.
EDIT: Mein Hauptproblem ist, ich bin mir nicht sicher, wie Sie Sie verwenden Javascript zur Anzeige das Drehfeld während die Tabelle geladen, aber ändern Sie dann die Tabelle, sobald die Seite fertig geladen ist
Mein code ist wie folgt:
HTML/eRB
<div class="list">
<div class="container">
<div class="row">
<div class="col-md-12">
<table id="app-list-table" class="display table" cellspacing="0">
<thead>
<tr class="table-headers">
<th>Header 1</th>
<th>Header 2</th>
<th>Header 3</th>
<th>Header 4</th>
<th>Header 5</th>
<th>Header 6</th>
<th>Header 7</th>
<th>Header 8</th>
<th>Header 9</th>
<th>Header 10</th>
</tr>
</thead>
<tbody>
<%= Server.find_each do |server| %>
<tr>
<td><%= link_to(server.server_name, server_path(server)) %></td>
<td><%= server.application %></td>
<td><%= server.server_role %></td>
<td><%= server.team_contact %></td>
<td><%= server.individual_contact %></td>
<td><%= server.business_owner %></td>
<td><%= server.vendor %></td>
<td><%= server.vendor_contact %></td>
<td><%= link_to("Click Here", server.main_doc) %></td>
<td><%= server.main_win %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
</div>
</div>
Javascript
$(document).ready(function() {
var table = $('#app-list-table').DataTable({
"scrollX": true
});
});
Bitte lassen Sie mich wissen, wenn es etwas gibt, was Sie möchte mir zu gehören.
- Spin.js ist eine option für die spinner selbst. Alles andere hängt davon ab, was Sie wollen, es zu schauen, wie...
- Der spinner und das design keine Rolle, dass viel. Mein Problem ist, ich weiß nicht, wo, um den js-code für die Anzeige der spinner, während die Seite geladen wird und dann die Tabelle angezeigt, sobald es vollständig geladen wurde... Entschuldigung, ich habe nicht klar genug gemacht, dass in meiner Frage
- Leider bin ich ein bisschen amateur mich. Aber ich glaube nicht, dass es eine DataTables Problem... Wenn meine Seite geladen wird es bevölkert die gesamte HTML-Abschnitt vor der Aktivierung DataTables, die Blätter eine unformatierte Tabelle. Ich denke, DataTables wartet auf SIE. Nicht die andere Weise herum
- ETA: wie werden die Daten geladen? Ist es asynchron? Zur Anzeige der spinner auf laden, Sie laden wollen, die spinner, bevor die Daten, dann entfernen Sie es nach seiner erfolgreich geladen
- Die Daten geladen, wie gezeigt, in der Frage. Es nutzt embedded ruby, um eine Schleife durch jedes Objekt, und füllen Sie die Spalten mit dem Objekt als Referenz. Ich bin mir nicht sicher, ob java-script und ruby asynchron laufen soll oder nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie fügen Sie in einem spinner gif (zu finden hier: http://www.ajaxload.info/) als
div
wo Ihre Tabelle werden soll und dann klar, wenn die Tabelle geladen, wobeiinitComplete
.Etwas wie dieses unten rechts
<div class="col-md-12">
:Und dann rufen Sie Ihre Tabelle so Aussehen:
Wenn die Daten geladen sind, in Ruby, es gibt keinen Punkt in dem laden ein spinner, da die Daten bereits geladen dann. Dies ist ein bare-bones-Bestellung von dem, was passiert in Ihrem Rails-app:
So, die Mehrheit der Ihre Verzögerung geschieht in Schritt 1, aber eine CSS - /JS-spinner nicht geladen wird, bis Schritt 4. Wenn Sie möchten, verwenden Sie ein spinner ist, müssen Sie zum laden der Daten per Ajax async, so können Sie laden Sie die spinner in 4, dann beenden Sie das laden von Daten und entfernen Sie den spinner in 5. Mit jQuery Ajax:
Natürlich könnten Sie fügen Sie den spinner, um Ihre aktuelle code:
Jedoch wieder, da die meisten die Verzögerung geschieht in Ruby, Sie sehen nur die spinner für einen kurzen moment am Ende der Verzögerung. Um zu sehen, die spinner für die ganze Verzögerung, Ajax verwenden.
Wenn Sie auf der Suche nach einem Weg zu verbergen die datatable, bis es fertig ist, ist es möglich, dies zu tun, indem Sie die datatable innerhalb eines div, das zunächst als display:none und dann zeigt das div-nachdem Sie initialisiert die datatable... ich war auch mit einem opaque overlay-div über die ganze Seite, während die datatable(s) geladen werden, und eine Verzögerung von 500 ms zu zwingen, das laden von Effekt.
JS:
CSS:
HTML:
Ive verwendet den code unten auf den link, aber insteat mit einer alten jquery version sollten Sie verwenden die neueste (3.x), sonst Datatables Absturz. Hoffe, diese Hilfe
http://bradsknutson.com/blog/display-loading-image-while-page-loads/