Transfiriendo valores NaN entre Zend AMF y Flex

Hay una discrepancia entre AS3 y PHP aun no solucionada por Zend AMF que puede llevar a un error no esperado cuando se trabajan con valores numericos. El problema consiste en que para PHP una variable es nula si null, sin embargo para AS3 el valor nulo de una variable depende de su tipo. Especificamente para las variables de tipo Number este valor es NaN.

Cuando Zend AMF devuelve una clase con variables nulas AS3 lo recibe asi, pero para AS3 las variables Number no pueden ser null y para salir de este problema convierte el null en 0 (cero). Y es asi como terminas teniendo variables con valores en cero en lugar del esperado NaN.

La manera mas facil de arreglarlo es hacerle un puente al problema utilizando setters para recibir el valor entregado por el servidor, validarlo y decidir si es un aceptarlo o no.

Se puede entender mejor viendo el siguiente ejemplo:

[sourcecode language=»actionscript3″]
package DTO{
[RemoteClass(alias="claseDTO")]
[Bindable]
public class claseDTO{
/**
* Solo se tiene acceso a esta variable a travez de su getter/setter
*/
private var _numero:Number;

/*
* Definiendo el getter/setter para la variable privada _numero.
* Recordar que Number es una subclase de Object.
*/
public function get numero():Object{
return _numero;
}
public function set numero(val:Object):void{
//Si el valor dado es un numero
if(val is Number)
_numero = val as Number;
}

}
}
[/sourcecode]

Los comentarios son bienvenidos.

1 respuesta

  1. Very interesting post. Thanks.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.