Ich bin ein großer Knockoutjs-Fan. Ich benutze es jetzt für meine gesamte Webentwicklung und liebe es einfach. Eine Sache, die ich jedoch nicht herausfinden konnte, ist, wie die Benutzeroberfläche ausgeblendet wird, während die Knockout-Bindungen erstellt werden.
Zum Beispiel habe ich eine sehr robuste Benutzeroberfläche mit vielen Vorlagen, die auf meiner Seite verwendet werden. Das Problem, das mir auffällt, ist, dass der Benutzer beim ersten Besuch der Seite alle meine Vorlagen für den Bruchteil einer Sekunde sieht, bevor die Bindungen aktiviert werden.
Was ist der beste Weg, um dieses Problem zu beheben? Ich habe versucht, Hilfsklassen zu verwenden, um sie auszublenden, aber dann können die Vorlagen nicht mit den Bindungen 'sichtbar' und 'wenn' angezeigt werden, es sei denn, ich entferne die Referenz der Hilfsklasse (dh ui-helper-hidden).
loaded
Observable funktionieren könnte. Sie müssenstyle="display: none"
ein Containerelement zusammen mit hinzufügenvisible: loaded
und es dann auf true umschalten, nachdem Ihre Bindungen angewendet wurden. Dievisible
Bindung entfernt dasdisplay: none
(es kann nicht steuern, was in Ihrem CSS ist).display:none
möglicherweise nicht von Bots erfasst wird.Ich habe nur danach gegoogelt und nachdem ich den beobachtbaren Weg gewählt hatte, dachte ich an einen anderen Ansatz:
<div style="display: none" data-bind="visible: true"> <ul data-bind="foreach: items"> <li data-bind="text: name"></li> </ul> </div>
Sie benötigen keine Observable, die sichtbare wird immer als true ausgewertet, sobald die Datenbindung abgeschlossen ist.
quelle
<ul data-bind="foreach: items, visible: true"> <li data-bind="text: name"></li> </ul>
<div data-bind='visible: false'> Screen loading... </div>
<div class="beforeReady" data-bind="css: {ready: true}">
wenn Sie CSS-Animationen machen wollten, um es anzuzeigen (wie Deckkraft oder etwas)Hier ist eine Nur-CSS-Methode, wenn Sie befürchten, dass nicht gestaltete Widgets vor der Bindung für MVVM-Implementierungen angezeigt werden .
[data-role]:not([role], [tabindex]) { visibility: hidden; }
Ich habe es nicht auf allen Kendo-Widgets getestet, aber es scheint für die meisten zu funktionieren.
quelle
Hier ist ein alternativer Ansatz, bei dem Klassen für "Verstecken und" Anzeigen "anstelle eines Inline-Stils verwendet werden. Fügen Sie dem Element, das bis zum Laden des Inhalts ausgeblendet werden soll, eine" Verstecken "-Klasse hinzu und fügen Sie eine" CSS "-Datenbindung hinzu, um sie zu erstellen angezeigt werden, wenn es gebunden ist.
<div class="hide" data-bind="css: {'show': true}"> </div>
Die Klassen 'hide' und 'show' sind bereits in Bootstrap definiert.
Wenn Bootstrap nicht verwendet wird, kann das CSS wie folgt definiert werden:
.hide { display: none !important; } .show { display: block !important; }
Die Reihenfolge ist wichtig. Die Klasse "hide" sollte vor "show" definiert werden.
quelle