2013-02-12 4 views
5

Ich habe eine Dart + Web UI-Anwendung, die zuerst Daten aus dem lokalen IndexedDB-Speicher laden muss. Die IndexedDB-API ist asynchron, daher erhalte ich einen Rückruf, wenn meine Daten geladen werden. Ich möchte keine UI-Elemente anzeigen, bis meine Datenbank zum ersten Mal geöffnet und betriebsbereit ist.Wie zeige ich meine Benutzeroberfläche erst an, nachdem meine App initialisiert wurde?

Wie kann ich auf meine Datenbankinitialisierung warten, bevor ich meine Benutzeroberfläche anzeigen?

Antwort

5

ich die Web-Benutzeroberfläche Art und Weise in meinem Projekt mache:

... 
<body> 
    <template if="showApplication"> 
    <span>The app is ready.</span> 
    </template> 
</body> 
... 
@observable bool showApplication = false; 

main() { 
    // Initialize... 
    window.indexedDB.open(...).then((_) { 
    showApplication = true; 
    }); 
} 

Dies hat auch einen zusätzlichen Bonus: separate Code/Web-Komponenten können auch den App-Status überprüfen, bevor db-Konnektivität usw.

3

ausblenden body Tag mit visibility:hidden:

<body style="visibility:hidden"> 
    <!-- content --> 
</body> 

und zeigen Sie es dann in Ihre Zukunft dann() Callback-

window.indexedDB.open(dbName, 
    version: version, 
    onUpgradeNeeded: createObjectStore).then(handleDBOpened); 

handleDBOpened(..) { 
    query('body').style.visibility = "visible"; // <-- show the body tag 
} 
+1

Dies ist nicht immer wichtig, aber ein feiner Unterschied zwischen der Verwendung der Sichtbarkeit (diese Antwort) und Verwendung eine Vorlage-if (Kai's Antwort) ist, dass alles innerhalb der Vorlage-wenn nicht ausgewertet wird, wenn die Bedingung falsch ist, also wenn Sie haben: '

' vs '