Eine Ember.View ist derzeit auf die Tags beschränkt, die vom W3C für Sie erstellt werden. Aber wenn Sie Ihre eigenen anwendungsspezifischen HTML-Tags definieren und deren Verhalten dann mit JavaScript implementieren möchten? Mit einem Ember.View ist dies nicht möglich .
Genau das können Sie mit Komponenten tun. Tatsächlich ist es eine so gute Idee, dass das W3C derzeit an der Spezifikation für benutzerdefinierte Elemente arbeitet .
Die Implementierung von Komponenten durch Ember versucht, der Spezifikation der Webkomponenten so nahe wie möglich zu kommen. Sobald benutzerdefinierte Elemente in Browsern weit verbreitet sind, sollten Sie in der Lage sein, Ihre Ember-Komponenten problemlos auf den W3C-Standard zu migrieren und sie auch von anderen Frameworks verwenden zu können, die den neuen Standard übernommen haben.
Dies ist für uns so wichtig, dass wir eng mit den Normungsgremien zusammenarbeiten, um sicherzustellen, dass unsere Implementierung von Komponenten der Roadmap der Webplattform entspricht.
Es ist auch wichtig zu beachten, dass eine Ember.Component tatsächlich eine Ember.View (eine Unterklasse) ist, die jedoch vollständig isoliert ist . Der Eigenschaftszugriff in seinen Vorlagen erfolgt zum Ansichtsobjekt , und Aktionen werden auch auf das Ansichtsobjekt gerichtet . Es gibt keinen Zugriff auf die Umgebung context
oder controller
alle äußeren Kontextinformationen werden übergeben , was bei einem Ember.View nicht der Fall ist, der tatsächlich Zugriff auf den umgebenden Controller hat, z. B. in einer Ansicht, in der Sie so etwas tun könnten, wie Sie es this.get('controller')
möchten Controller, der derzeit der Ansicht zugeordnet ist.
Was ist der Hauptunterschied zwischen einer Ansicht und einer Komponente?
Der Hauptunterschied neben den Komponenten, mit denen Sie Ihre eigenen Tags erstellen können, und zu einem späteren Zeitpunkt, wenn benutzerdefinierte Elemente verfügbar sind, können Sie diese Komponenten auch in anderen Frameworks migrieren / verwenden, die benutzerdefinierte Elemente unterstützen. Dies ist in der Tat, dass es sich irgendwann um eine Glutkomponente handelt wird eine Ansicht je nach dem spezifischen Implementierungsfall etwas veraltet machen.
Und was wäre ein häufiges Beispiel, bei dem ich lieber eine Ansicht über eine Komponente verwenden würde und umgekehrt?
Im Folgenden hängt dies eindeutig von Ihren Anwendungsfällen ab. Als Faustregel gilt jedoch, dass Sie in Ihrer Ansicht Zugriff auf den umgebenden Controller usw. benötigen. Verwenden Sie jedoch eine Ember.View . Wenn Sie jedoch die Ansicht isolieren und nur die Informationen übergeben möchten, die für die Arbeit erforderlich sind, ist sie kontextunabhängig und viel wiederverwendbarer, verwenden Sie eine Ember.Component .
Ich hoffe es hilft.
Aktualisieren
Mit der Veröffentlichung von Road to Ember 2.0 wird Ihnen jetzt empfohlen, in den meisten Fällen Komponenten anstelle von Ansichten zu verwenden.