2011-12-21 8 views
8

No puedo determinar la diferencia entre Element.setAttribute(String name, String value) y Element.setPropertyString(String name, String value). ¿Hay una diferencia? ¿Qué se prefiere cuando se intenta establecer, por ejemplo, un marcador de posición en una entrada de texto? He estado haciendo getElement().setPropertyString("placeholder", "this is a placeholder"); y funciona, pero ¿es esa la forma adecuada de hacerlo?GWT Elemento setAttribute vs setPropertyString

En el documentation for DOM, , está en desuso, diciendo que utilice "el nombre más apropiado setElementProperty(Element, String, String) en su lugar". ¿Eso implica que uno debería estar usando los métodos de nombre similar de Element?

Respuesta

6

El problema es que en IE6 e IE7 (e IE8 en modos de compatibilidad), setAttribute realmente establece la propiedad (IE realmente no hace la diferencia; IE8 agregó un argumento opcional a getAttribute para permitir recuperar el atributo como se define en la especificación DOM; ver http://msdn.microsoft.com/en-us/library/ms536429v=vs.85.aspx).

Por cierto, su referencia JavaDoc debe ser http://google-web-toolkit.googlecode.com/svn/javadoc/latest/index.html (no el uno para GWT 1.5, que es gravemente obsoleta), y se debe utilizar en lugar de com.google.gwt.dom.client.Elementcom.google.gwt.user.client.DOM. Element tiene un setAttribute que establece el atributo en cada navegador que no sea IE6/7 (o modos similares de IE8).

Pero la mayoría de las veces, solo debe trabajar con propiedades DOM, en lugar de atributos. Por ejemplo, desea obtener el tab index como un número, no como una cadena. Y desea que el valor predeterminado/estado de una propiedad en la ausencia del atributo, no un null que tendría que manejarse (por ejemplo, un input valores por defecto de elementos a type=text cuando no hay type atributo; getAttribute("type") volvería null mientras que getPropertyString("type") haría return "text").

+0

Según el Javadoc en GWT 2.4, 'getAttribute'" Devuelve: el valor de Attr como una cadena, o la cadena vacía si ese atributo no tiene un valor especificado o predeterminado ", no es un valor nulo, pero eso no afecta el resto de la respuesta. +1 –

+0

Además, ¿cómo afecta esto la eliminación de propiedades/atributos? Por ejemplo, hay un 'removeAttribute()', pero no 'removeProperty()'. Digamos que tengo '' y quería eliminar la restricción 'max'. ¿Cómo se lograría eso? –

+0

Ajústelo a cualquier valor que elimine la restricción, por ejemplo, la cadena vacía (también podría intentar 'null'). Ver http://dev.w3.org/html5/spec/common-input-element-attributes.html#the-min-and-max-attributes y http://dev.w3.org/html5/spec/states -of-the-type-attribute.html # number-state-type-number –

6

Hay una diferencia entre los atributos y las propiedades. En resumen, el atributo representa el estado inicial, mientras que la propiedad siempre representa el estado actual.

Ver http://jquery-howto.blogspot.com/2011/06/html-difference-between-attribute-and.html para una explicación detallada.

En llamadas GWT setAttribute llama a la función javascript nativa setAttribute en el elemento actual. Llamar a setProperty ... establece la propiedad en el elemento actual.

En el pasado, esto en la mayoría de los navegadores solía ser el mismo, pero con estándares en evolución esto comenzó a cambiar hace tiempo.

I don `t saber realmente todas las pequeñas diferencias entre las implementaciones de navegador, pero para rastrear la diferencia se podría confiar en los diferentes DOM Nivel Especificaciones: http://www.w3.org/TR/DOM-Level-2-HTML/http://www.w3.org/TR/DOM-Level-3-Core/

también la documentación de Mozilla están en setAttribute son bastante pude y indique la diferencia para firefox: https://developer.mozilla.org/en/DOM/element.setAttribute

Así que en resumen: si utiliza setAttribute en GWT, confíe en el navegador setAttribute implementación que de alguna manera establece el valor actual (en ciertas propiedades, y no actualiza un valor), por lo que normalmente quiere setProperty ...

+0

+1 para investigación. Sin embargo, en el contexto de una aplicación GWT, donde DOM * does * change, ¿esto todavía se aplica? –

+0

He actualizado la respuesta para que se ajuste mejor a un fondo gwt –

Cuestiones relacionadas