Pytanie Jak stworzyć GWT JsArray?


Potrzebuję konwersji wartości typu T na JsArray.

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

Czy ktoś może mi pomóc?

Z góry dziękuję, Gnik


9
2018-06-17 07:50


pochodzenie




Odpowiedzi:


Nie masz dużego wyboru: tworzenie a JsArrayString i dodając do niego lub używając JSNI.

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

lub

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

Oczywiście ta ostatnia nie skaluje się, a jednocześnie jest szybsza.

To naprawdę zależy od tego, co dokładnie musisz zrobić.


20
2018-06-17 09:11





Posługiwać się JsArrayUtils lubię to:

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

Spójrz na javadoc:

com.google.gwt.core.client.JsArrayUtils

Klasa użytkowa do manipulowania tablicami JS. Te metody nie są włączone   inne podklasy JavaScriptObject, takie jak JsArray, ponieważ dodawanie nowych   metody mogą przełamać istniejące podtypy.


4
2018-04-24 12:28





Używając generycznych, można to zrobić tak:

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

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

    return array;
}

Oczywiście, String nie rozszerza się JavaScriptObject. Aby uwzględniać prymitywne typy, musisz mieć przeciążenia. (Lub, mniej bezpiecznie, możesz usunąć granice T aby pozwolić na arbitralne typy. Jeśli chcesz to zrobić, musisz być o wiele bardziej ostrożny.)


1
2018-06-17 14:29