2012-06-17 6 views
9

Necesito convertir valores de tipo T en JsArray.¿Cómo crear GWT JsArray?

eg. I have String1, String2 .... Stringn 
I need to convert those String into JsArray<String> 

¿Alguien me puede ayudar?

Gracias de antemano, Gnik

Respuesta

20

No tiene muchas opciones: crear un JsArrayString y añadiendo a la misma, o el uso de JSNI.

JsArrayString arr = JavaScriptObject.createArray().cast(); 
arr.push(str1); 
arr.push(str2); 
arr.push(str3); 

o

static native JsArrayString asJsArray(String str1, String str2, String str3) /*-{ 
    return [str1, str2, str3]; 
}-*/; 

Obviamente, este último no escala, mientras que ser más rápido.

Realmente depende de lo que necesita hacer exactamente.

1

El uso de los genéricos, podría hacerlo de esta manera:

public <T extends JavaScriptObject> JsArray<T> createGenericArray(T... objects) { 
    JsArray<T> array = JavaScriptObject.createArray().cast(); 

    for (T object : objects) { 
     array.push(object); 
    } 

    return array; 
} 

Obviamente, String no se extiende JavaScriptObject. Debería tener sobrecargas para tener en cuenta los tipos primitivos. (O, menos segura, usted podría quitar los límites de T para permitir tipos arbitrarios Se necesitaría ser mucho más cuidadoso si tuviera que hacerlo..)

4

Uso JsArrayUtils así:

JsArray<String> arr = JsArrayUtils.readOnlyJsArray(new String[] { string1, string2 }); 

Tome un vistazo a la javadoc:

com.google.gwt.core.client.JsArrayUtils clase

utilidad para manipular Matrices JS. Estos métodos no están en otras subclases de JavaScriptObject, como JsArray, porque la adición de nuevos métodos podría romper los subtipos existentes.