GWT Element setAttribute vs setPropertyString

8

Ich kann den Unterschied zwischen Element.setAttribute(String name, String value) und Element.setPropertyString(String name, String value) nicht feststellen. Ist da ein Unterschied? Was wird bevorzugt, wenn versucht wird, beispielsweise einen Platzhalter auf einer Texteingabe zu setzen? Ich habe getElement().setPropertyString("placeholder", "this is a placeholder"); gemacht und es funktioniert, aber ist das der richtige Weg?

In der Dokumentation für DOM , setAttribute(Element, String, String) ist veraltet und besagt, dass "stattdessen der passendere Name setElementProperty(Element, String, String) " verwendet werden soll. Bedeutet das, dass man die ähnlich benannten Methoden von Element verwenden sollte?

    
Chris Cashwell 21.12.2011, 13:08
quelle

2 Antworten

6

Das Problem ist, dass in IE6 und IE7 (und IE8 in Kompatibilitätsmodi) setAttribute die Eigenschaft tatsächlich setzt (IE macht keinen Unterschied); IE8 hat ein optionales Argument zu getAttribute hinzugefügt, um das Abrufen des Attributs zu ermöglichen wie in der DOM-Spezifikation definiert, siehe Ссылка ).

Übrigens sollte Ihre JavaDoc-Referenz Ссылка sein (nicht die für GWT 1.5, das stark veraltet ist), und Sie sollten com.google.gwt.dom.client.Element anstatt com.google.gwt.user.client.DOM verwenden. Element hat eine setAttribute , die das Attribut in jedem Browser anders als IE6 / 7 (oder ähnlichen Modi von IE8) setzt.

Aber die meiste Zeit sollten Sie nur mit DOM-Eigenschaften und nicht mit Attributen arbeiten. Zum Beispiel möchten Sie die tab index als eine Zahl, nicht als eine Zeichenfolge erhalten. Und Sie möchten den Standardwert / Status für eine Eigenschaft in Abwesenheit des Attributs, nicht eine null , die Sie selbst behandeln müssten (zB ein input -Element ist standardmäßig type=text , wenn es kein type -Attribut gibt ; getAttribute("type") würde null zurückgeben, während getPropertyString("type") "text" ) zurückgeben würde.

    
Thomas Broyer 21.12.2011, 14:59
quelle
6

Es gibt einen Unterschied zwischen Attributen und Eigenschaften. Kurz gesagt repräsentiert das Attribut den Anfangszustand, während die Eigenschaft immer den aktuellen Zustand darstellt.

Siehe Ссылка für eine detaillierte Erklärung.

In GWT ruft das Aufrufen von setAttribute die systemeigene JavaScript-Funktion setAttribute für das aktuelle Element auf. Rufen Sie setProperty ... auf, legen Sie die Eigenschaft für das aktuelle Element fest.

In der Vergangenheit war dies in den meisten Browsern dasselbe, aber mit sich entwickelnden Standards begann sich dies zu ändern.

Ich kenne nicht wirklich alle kleinen Unterschiede zwischen Browser-Implementierungen, aber um den Unterschied zu verfolgen, könnte man sich auf die verschiedenen DOM-Level-Spezifikationen verlassen: Ссылка Ссылка

Auch die Mozilla-Dokumente sind am SetAttribute sind durchaus möglich und geben den Unterschied für Firefox: Ссылка / p>

Also zusammenfassend: Wenn Sie setAttribute in GWT verwenden, verlassen Sie sich auf die setAttribute-Implementierung des Browsers, die den defualt-Wert etwas festlegt (bei bestimmten Eigenschaften und nicht bei der Aktualisierung eines Wertes), also normalerweise setProperty ...

    
Daniel Kurka 21.12.2011 14:09
quelle

Tags und Links