Das Design der select
Funktionalität bei der Materialisierung von CSS ist meiner Meinung nach ein ziemlich guter Grund, es nicht zu verwenden.
Sie müssen das Auswahlelement mit initialisieren material_select()
, wie @ littleguy23 erwähnt. Wenn Sie dies nicht tun, wird das Auswahlfeld nicht einmal angezeigt! In einer altmodischen jQuery-App kann ich sie in der Dokumentbereitschaftsfunktion initialisieren. Ratet mal, weder ich noch viele andere Leute verwenden heutzutage jQuery, noch initialisieren wir unsere Apps im Dokument-Ready-Hook.
Dynamisch erstellte Auswahlen . Was ist, wenn ich Auswahlen dynamisch erstelle, wie dies in einem Framework wie Ember der Fall ist, das Ansichten im laufenden Betrieb generiert? Ich muss in jeder Ansicht Logik hinzufügen, um das Auswahlfeld bei jeder Generierung einer Ansicht zu initialisieren, oder ein Ansichtsmixin schreiben, um dies für mich zu erledigen. Und es ist noch schlimmer: Wenn die Ansicht generiert und in Ember-Begriffen didInsertElement
aufgerufen wird, ist die Bindung an die Liste der Optionen für das Auswahlfeld möglicherweise noch nicht gelöst. Daher muss die Optionsliste mithilfe einer speziellen Logik überwacht werden, um zu warten, bis sie angezeigt wird vor dem Anruf an die material_select
. Wenn sich die Optionen wie leicht ändern, material_select
hat dies keine Ahnung und aktualisiert das Dropdown-Menü nicht. Ich kann material_select
erneut anrufen , wenn sich die Optionen ändern, aber es scheint, dass dies nichts bewirkt (wird ignoriert).
Mit anderen Worten, es scheint, dass die Entwurfsannahme hinter den Auswahlfeldern von CSS darin besteht, dass sie alle beim Laden der Seite vorhanden sind und sich ihre Werte nie ändern.
Implementierung . Aus ästhetischer Sicht bin ich auch nicht für die Art und Weise, wie CSS seine Dropdowns implementiert, dh eine parallele Schattenmenge von Elementen an einer anderen Stelle im DOM zu erstellen. Zugegeben, Alternativen wie select2 machen dasselbe, und es gibt möglicherweise keinen anderen Weg, um einige der visuellen Effekte zu erzielen (wirklich?). Wenn ich jedoch ein Element inspiziere, möchte ich das Element sehen, nicht irgendeine Schattenversion, die jemand auf magische Weise erstellt hat.
Wenn Ember die Ansicht herunterreißt, bin ich mir nicht sicher, ob CSS die von ihm erstellten Schattenelemente herunterreißt. Eigentlich wäre ich ziemlich überrascht, wenn es so wäre. Wenn meine Theorie richtig ist, wenn Ansichten generiert und abgerissen werden, wird Ihr DOM mit Dutzenden von Schatten-Dropdowns verschmutzt, die mit nichts verbunden sind. Dies gilt nicht nur für Ember, sondern für jedes andere MVC / Template-basierte OPA-Front-End-Framework.
Bindungen . Ich konnte auch nicht herausfinden, wie der im Dialogfeld ausgewählte Wert zum Binden an irgendetwas Nützliches in einem Framework wie Ember verwendet werden kann, das Auswahlfelder über eine Typschnittstelle aufruft {{view 'Ember.Select' value=country}}
. Mit anderen Worten, wenn etwas ausgewählt ist, country
wird es nicht aktualisiert. Dies ist ein Deal-Breaker.
Wellen . Übrigens gelten die gleichen Probleme für den "Wellen" -Effekt auf Schaltflächen. Sie müssen es jedes Mal initialisieren, wenn eine Schaltfläche erstellt wird. Ich persönlich interessiere mich nicht für den Welleneffekt und verstehe nicht, worum es in der ganzen Aufregung geht, aber wenn Sie Wellen wollen, denken Sie daran, dass Sie einen Großteil Ihres restlichen Lebens damit verbringen werden, sich Gedanken darüber zu machen, wie Initialisieren Sie jede einzelne Schaltfläche, wenn sie erstellt wird.
Ich schätze die Bemühungen der materialisierten CSS-Leute und es gibt einige nette visuelle Effekte, aber es ist zu groß und hat zu viele Fallstricke wie die oben genannten, um etwas zu sein, das ich verwenden würde. Ich plane jetzt, materialisiertes CSS aus meiner App herauszureißen und entweder zu Bootstrap oder einer Ebene über Suit CSS zurückzukehren. Ihre Werkzeuge sollten Ihnen das Leben erleichtern und nicht erschweren.
<select class="browser-default">