2011-12-21 10 views
8

non riesco a determinare la differenza tra Element.setAttribute(String name, String value) e Element.setPropertyString(String name, String value). C'è una differenza? Quale è preferibile quando si tenta di impostare, ad esempio, un segnaposto su un input di testo? Ho fatto getElement().setPropertyString("placeholder", "this is a placeholder"); e funziona, ma è il modo appropriato per farlo?GWT Elemento setAttribute vs setPropertyString

Nel documentation for DOM, setAttribute(Element, String, String) è deprecato, dicendo di usare "il nome più appropriato, setElementProperty(Element, String, String)". Questo implica che si dovrebbero usare i metodi con lo stesso nome di Element?

risposta

6

Il problema è che in IE6 e IE7 (e IE8 in modalità di compatibilità), setAttribute imposta effettivamente la proprietà (IE non fa davvero la differenza; IE8 ha aggiunto un argomento facoltativo a getAttribute per consentire il recupero dell'attributo come definito nelle specifiche DOM; vedi http://msdn.microsoft.com/en-us/library/ms536429v=vs.85.aspx).

BTW, il vostro riferimento JavaDoc dovrebbe essere http://google-web-toolkit.googlecode.com/svn/javadoc/latest/index.html (non quello per GWT 1.5, che è gravemente obsoleto), e si dovrebbe usare com.google.gwt.dom.client.Element piuttosto che com.google.gwt.user.client.DOM. Element ha uno setAttribute che imposta l'attributo in ogni browser diverso da IE6/7 (o modalità simili di IE8).

Ma la maggior parte del tempo, dovresti solo lavorare con le proprietà del DOM, piuttosto che con gli attributi. Ad esempio, si desidera ottenere lo tab index come numero, non come stringa. E si desidera che il valore/stato predefinito per una proprietà in assenza dell'attributo, non un null che si avrebbe dovuto gestire da soli (ad esempio un input elemento default type=text quando non c'è type attributo; getAttribute("type") sarebbero tornati null mentre getPropertyString("type") sarebbe restituire "text").

+0

Secondo Javadoc in GWT 2.4, 'getAttribute'" Restituisce: il valore Attr come stringa o la stringa vuota se quell'attributo non ha un valore specificato o predefinito ", non un null, ma ciò non influenza il resto della risposta. +1 –

+0

Inoltre, in che modo ciò influisce sulla rimozione di proprietà/attributi? Ad esempio, c'è un 'removeAttribute()', ma non 'removeProperty()'. Diciamo che ho '' e volevo rimuovere la restrizione 'max'. Come sarebbe stato realizzato? –

+0

Impostalo su qualsiasi valore che rimuova il vincolo, ad esempio la stringa vuota (potresti provare anche 'null'). Vedi http://dev.w3.org/html5/spec/common-input-element-attributes.html#the-min-and-max-attributes e http://dev.w3.org/html5/spec/states -of-the-tipo-attribute.html # numero-stato-tipo-number –

6

C'è una differenza tra attributi e le proprietà. In breve, l'attributo rappresenta lo stato iniziale mentre la proprietà rappresenta sempre lo stato corrente.

Vedi http://jquery-howto.blogspot.com/2011/06/html-difference-between-attribute-and.html per una spiegazione dettagliata.

In GWT chiamando setAttribute chiama la funzione nativa setAttribute javascript dell'elemento corrente. Chiamando setProperty ... imposta la proprietà sull'elemento corrente.

In passato questo nella maggior parte dei browser questo era lo stesso, ma con gli standard in evoluzione questo ha iniziato a cambiare fa.

I don `t davvero sapere tutte le piccole differenze tra le implementazioni dei browser, ma per monitorare la differenza si può fare affidamento sul diverso DOM Level Spec: http://www.w3.org/TR/DOM-Level-2-HTML/http://www.w3.org/TR/DOM-Level-3-Core/

anche la documentazione di Mozilla sono setAttribute sono abbastanza poteva e indicare la differenza per firefox: https://developer.mozilla.org/en/DOM/element.setAttribute

Quindi, in sintesi: se si utilizza setAttribute in GWT si fa affidamento sull'implementazione setAttribute del browser che in qualche modo imposta il valore defualt (su determinate proprietà e non si aggiorna un valore), quindi normalmente si desidera setProperty ...

+0

+1 per la ricerca. Tuttavia, nel contesto di un'applicazione GWT, dove DOM * cambia *, si applica ancora? –

+0

Ho aggiornato la risposta per adattarla meglio ad uno sfondo gwt –

Problemi correlati