Mam problemy z korzystaniem z shadow DOM dla jednego z komponentów internetowych (papierowy program krokowy) i wymaga użycia cieniowanego DOM. Nie jestem pewien, jakie są różnice i dlaczego tak się dzieje.Jaka jest różnica między podejrzanym DOM-a w stosunku do cieniowania Polymer?
Odpowiedz
Here's dobre wyjaśnienie, dlaczego.
Tl; DR:
Cień DOM:
Cień DOM działa poprzez ukrywanie scoped drzewa DOM od tradycyjnych funkcji drzewo spacerowych i dostępowych (childNodes, dzieci, firstChild i tak na). Te akcesory zwracają tylko te elementy w swoim zasięgu.
Co to oznacza, że ukrywa przed Tobą złożoność. Jednym z przykładów, które znalazłem w Internecie, było oznaczenie <video></video>
. Wyjaśnia, jak w nim znajdują się kontrolki wideo, ale te są usuwane i nie można ich zobaczyć. Tak działa DOM Shadow, ale dla wszystkich komponentów sieciowych.
Cień DOM brzmi ładnie, ale istnieją ograniczenia
- Jest dużo kodu.
- Powoli pośredniczy wszystkie DOM API.
- Struktury takie jak NodeList nie mogą być po prostu emulowane.
- Istnieje kilka akcesorów, których nie można zastąpić (na przykład window.document, window.document.body).
- Polyfill zwraca obiekty, które nie są rzeczywiście węzłami, ale serwery proxy, które mogą być bardzo mylące.
tym miejscu zacienionym DOM przychodzi
Shady DOM.
Shady DOM jest superszybki podkładka dla cienia DOM, który zapewnia drzewo-scopingu, ale ma wady . Co najważniejsze, do pracy z drzewami o ustalonych zakresach należy użyć podejrzanych interfejsów API DOM-a.
Używając Shady DOM, nie masz teraz abstrakcyjnego widoku komponentów. Możesz zobaczyć wszystko. Jednak z Shady DOM, można zbadać, jak drzewo będzie wyglądać jeśli Cień DOM był używany zamiast uruchamiając w ten sposób:
var arrayOfNodes = Polymer.dom(YOUR_SELECTOR_GOES_HERE).children;
Więc, biorąc wszystkie te informacje pod uwagę, w jaki sposób różne prace DOMS, wydaje się, komponent web-stepper-papier wymaga dostępu do całego drzewa, aby działał poprawnie. Skoro DOM Cienia wyabstrahowuje wewnętrzne elementy, musisz użyć Shady DOM lub zreorganizować kod w taki sposób, że nie trzeba uzyskiwać dostępu do wewnętrznych elementów spoza abstrakcji.
- 1. Jaka jest dokładna różnica między "reflectToAttribute" Polymer i "notify"?
- 2. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 3. Jaka jest różnica między? : i ||
- 4. Jaka jest różnica między $ i $$?
- 5. Jaka jest różnica między * i * | * w CSS?
- 6. jaka jest różnica między @ i @@ w module?
- 7. Jaka jest różnica między == a === w Verilog?
- 8. Jaka jest różnica między = i: = w mysql?
- 9. Jaka jest różnica między! = I =! w Javie?
- 10. Jaka jest różnica między 'i "w PHP
- 11. Jaka jest różnica między! i !! w yaml?
- 12. Jaka jest różnica między * i. * W Matlab?
- 13. Jaka jest różnica między | i || w MATLAB?
- 14. Jaka jest różnica między Run a Do w Rx?
- 15. Jaka jest różnica między linią podobną do podobnej w ABAP?
- 16. Jaka jest różnica między "następnym" a "do" w pdb
- 17. Jaka jest różnica między developer.paypal.com i x.com?
- 18. Jaka jest różnica między GEM_HOME a GEM_PATH?
- 19. Jaka jest różnica między kopiowaniem a klonowaniem?
- 20. Jaka jest różnica między ramką a ramką?
- 21. Jaka jest różnica między CellClick i CellMouseClick?
- 22. Jaka jest różnica między krotką a kompresją?
- 23. Jaka jest różnica między Eclipse i Myeclipse
- 24. Jaka jest różnica między java i jsp?
- 25. Jaka jest różnica między JavaBean a POJO?
- 26. Jaka jest różnica między BrowserAnimationsModule i NoopAnimationsModule?
- 27. Jaka jest różnica między StoreModule.forRoot() a StoreModule.forFeature()
- 28. Jaka jest różnica między composer.lock a installed.json?
- 29. Jaka jest różnica między System.Windows.Controls.Control i System.Windows.Forms.Control?
- 30. Jaka jest różnica między pakietem a intencją?
To zależy od tego, czy korzystasz z trybu otwartego czy zamkniętego podczas dołączania drzewa cienia. – Antimony