2017-07-06 5 views
2

J'ai créé mon propre tableau personnalisé dans JsInterop:JsInterop - Obtenir la valeur en Array

@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Array") 
public interface Array<T> 
{ 
    public void push(T value); 

    @JsProperty(name = "length") 
    public int getLength(); 

    @JsProperty(name = "length") 
    void setLength(int newLength); 

    @JsOverlay 
    default T get(int index) { 
     return JsArrayHelper.getArrayValue(this, index); 
    } 
} 

Et voici la classe JsArrayHelper mise à l'échelle vers le bas:

public class JsArrayHelper 
{ 
    //TODO: Eliminate JSNI. Better way to do this? 
    public static native <T> T getArrayValue(Array<T> a, int i) /*-{ 
     return a[i]; 
    }-*/; 
} 

Y at-il une meilleure façon d'obtenir la valeur du tableau au lieu d'utiliser JSNI? Lib, cette lib devrait inclure des utilitaires pour tout ce qui ne peut être fait avec JsInterop, et la lib maintiendra la compatibilité avec GWT et j2cl.

Répondre

3

Utilisez com.google.jsinterop:base La lib est assez petite (seulement 10 classes, dont 2 internes), il suffit donc de l'ajouter à votre projet et d'explorer tous ses utilitaires.

Donc, au lieu de vos classes personnalisées Array<T>.get(int) et JsArrayHelper utilisez jsinterop.base.JsArrayLike<T>.getAt(int).

+0

Merci. Essayer maintenant. Je suppose que j'ai aussi besoin d'hériter: jsinterop.base.Base. Mais je reçois cette erreur: "Aucun code source n'est disponible pour le type jsinterop.base.JsArrayLike , avez-vous oublié d'hériter d'un module requis?" –

+0

Je pense que vous devez utiliser GWT 2.8.1. –