En tu c�digo veo varias cosas.
� La primera de ellas el bucle for in que usas. Aunque 'userList', el
par�metro que recibe la funci�n onSync, se pueda considerar un array o
una colecci�n el bucle for in no te funcionar�. En vez de for in usa un
for normal con �ndice superior userList.length.
� el uso que haces del evento onSync es un tanto confuso y creo que
tienes confundido su funcionamiento. Este evento es llamado por el
servidor cada vez que ha habido un cambio, adici�n o borrado de alguna
de las propiedades almacenadas en el SharedObject. Recibe como par�metro
un vector con los elementos que se han modificado. Concretamente cada
elemento de este array es un objeto que consta de tres propiedades:
Code, name y OldValue.
Name indica el nombre del slot o propiedad que ha variado su valor.
OldValue indica el valor anterior al cambio de la propiedad
indicada por Name.
Code tiene cinco posibles valores y nos indican la acci�n sucedida:
� Success: en caso que el usuario realice alguna modificaci�n
sobre el SO, se tomar� este valor indicando que la modificaci�n se ha
realizado con �xito. Esta notificaci�n s�lo la recibe el usuario que ha
provocado el cambio.
� Change: El resto de usuarios que no han provocado el cambio
reciben esta notificaci�n, indicando que el slot determinado por Name ha
cambiado de valor.
� Reject: En caso que la modificaci�n sobre el SO no se haya
podido realizar se notificar� de esta forma. Normalmente los rechazos
suelen ser provocados por colisiones debidas a concurrencias. Para
solventar este problema debemos recurrir al uso de lock() y unlock().
Esta notificaci�n s�lo la recibe el cliente que intent� realizar la
modificaci�n.
� Clear: Esta notificaci�n la recibe el cliente que se conecta
por primera vez a un SO y simboliza que se est�n inicializando los
valores del SO.
� Delete: Notificaci�n para todos los clientes conectados a un
SO indicando que la propiedad o slot Name ha sido eliminada.
Ahora y dejando de lado los SO, para rellenar un componente list lo que
creo yo que es m�s pr�ctico es utilizar un DataProviderClass.
DataProviderClass es una clase que define una estructura de datos en
formato de array y que presenta un seguido de m�todos que nos permite
manipular estos datos. DataProviderClass se encarga de sincronizar las
vistas (en los componentes) de sus datos, esto quiere decir que si
modificamos los datos del DataProviderClass, estos cambios se reflejar�n
autom�ticamente en todos los componentes que tengan asignado este
contenedor como proveedor de datos. En resumen, es un array que cuando
lo modificas notifica sus cambios a los componentes que le hayas
asociado. En tu caso si lo asocias a tu lista te podr�s despreocupa
totalmente de ella y te tendr�s que preocupar exclusivamente del
DataProvider.
L�ete esto e igual ah� est� un poco mejor explicado:
http://www.code4net.com/archives/000005.html
Y ya me dejo de teor�a y te pongo c�digo para no cansarte (toda esta
teor�a pertenece m�s o menos (modificada pa que no se diga) a la segunda
entrega de los art�culos de Flash Communication Server para i-world, a�n
no publicada)
<code>
users_dpc = new DataProviderClass();
//En el escenario hay un listBox con nombre de instancia users_lb
users_lb.setDataProvider(users_dpc);
users_so = SharedObject.getRemote("users_so", conexion_nc.uri, false);
users_so.connect(conexion_nc);
users_so.onSync = function(userList) {
var i, clear = 0;
// Recorremos el vector de cambios en el SO
for (i = 0; i < userList.length; i++) {
switch (userList[i].code) {
case "change":
// En este caso ha habido cambios/a�adidos
// clear s�lo es true la primera vez que se recibe
// la sincronizaci�n con el SO, caso en el que no
// tenemos que mostrar que todos los usuarios han iniciado
// sesi�n
if(!clear) {
message = "<FONT COLOR='#B5B5AD'><b>" +
userList[i].name.toUpperCase();
message += " acaba de iniciar sesi�n." +"</b></FONT>\n";
}
// A�adimos el nuevo usuario a nuestro DataProviderClass
// y lo ordenamos
users_dpc.addItem({label:userList[i].name});
users_dpc.sortItemsBy("label", "ASC");
break
case "delete":
// Se ha elminiado alguno de los elementos
// Pasamos mensaje por history_txt
message = "<FONT COLOR='#B5B5AD'><b>" +
userList[i].name.toUpperCase();
message += " ha cerrado sesi�n."
+"</b></FONT>\n";
// Eliminamos el elemento del dataProviderClass
// Para ello utilizamos removeItem (documentada
// e implementada m�s arriba
users_dpc.removeItem(userList[i].name);
break
case "clear":
// 'clear' se invoca al sincronizar el SO por primera vez
var clear = 1;
break
}
}
}
};
</code>
Las implementaciones de los m�todos removeItem y searchItem del
dataProviderClass las puedes encontrar en el link que te he puesto
antes.
Yo supongo que por lo que hablabas de la lista de usuarios conectados
debes usar sharedObjects de servidor, sin� nada de todo esto tiene
sentido...
A ver si te sirve algo...
Saludos a todos
Xavi Beumala
<!-------------------------------
Lista ASNativos:
subscripciones/desubscripciones
http://www.sidedev.net/asnativos
-------------------------------->