Cambios en SDK DART: innerHTML, Element.rect y Event.srcElement

Con la nueva release 0.2.7.1_r15699 del DART Editor he recibido una serie de warnings y errores que pueden dar bastantes dolores de cabeza porque son métodos que seguramente estés utilizando en tú código.

innerHTML
Como ya se comentó aquí, en la nueva release el método innerHTML se ha renombrado por innerHtml, aunque ambos métodos aún se permiten deberás ir migrando tú código para utilizar innerHtml en lugar de innerHTML porque este último ya se ha marcado como obsoleto.

Element.rect
Como también sabes por este blog ElementRect ha desparecido. Para obtener el clientHeight o clientWidth de alguno de los elementos de nuestra interfaz debíamos utilizar llamadas asíncronas de este modo:

UListElement menu = document.query('#divMenu);
Future <ElementRect> menu = menu.rect;
menuSupRect.then((ms) {
  num msHeight = ms.client.height;
  // ... Resto de acciones.
});

Ahora todo esto se ha sustituido por el método requestLayoutFrame que está en la clase LocalWindow, sin embargo solo debes utilizarlo si lo que necesitas es una llamada asíncrona. Si por el contrario utilizas una llamada síncrona puedes utilizar el siguiente código.

UListElement menu = document.query('#divMenu');
num msHeight = menu.clientHeight;

Las llamadas asíncronas tendrán este formato:

window.requestLayoutFrame(() {
  num msHeight = document.query('#divMenu').clientHeight;
});

Event.srcElement
Por último, la clase Event ha perdido el método srcElement, este método nos permitía recuperar el elementeo sobre el que se había lanzado cierto evento, por ejemplo, nos permitía recuperar el botón sobre el que se había hecho click.

Supongamos que tenemos varios divs en pantalla a los que aplicamos un mismo evento on.click. Una vez lanzado el evento on.click queremos hacer algo con el div sobre el que hemos hecho clic. Veamos el código:

void _handleClick(Event e) {
  DivElement target = e.srcElement;
}

Como he comentado, srcElement ya no pertenece a la clase Event, por lo que ahora este método deberá tener el siguiente aspecto.

void _handleClick(Event e) {
  DivElement target = (e.target as DivElement);
}

Como puedes ver la clase Event tiene un método target que te devuelve el EventTarget del evento y haciendo un casting explícito puedes tener a tu disposición el element sobre el que se ha lanzado el evento.


 Google+

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s