Sono novizio in rinoceronte.Come abilitare 'for ... in' my NativeJavaObject in Rhino?
Attualmente sto utilizzando il framework di Rhino 1.7R tramite .NET 4 e IKVM.NET. Ho esposto diverse classi wrapping implementando NativeJavaObject usando l'API setWrapFractory().
public class InterceptNativeObject : NativeJavaObject
{
public InterceptNativeObject()
{
}
public override Object get(String name, Scriptable start)
{
Object res = base.get(name, start);
if (res is NativeJavaMethod)
{
NativeJavaMethod method = (NativeJavaMethod)res;
return new RhinoMethodWrapFunction(method);
}
if (res == org.mozilla.javascript.UniqueTag.NOT_FOUND &&
base.javaObject is IPropertBox && base.javaObject != null)
{
object ret = ((IPropertBox)base.javaObject)._x__GetPropertyValue(name);
return Utils.ConvertCLRValueToJavaValue(ret);
}
return res;
}
.....
}
Ora, posso accedere a tutti i metodi e proprietà .NET come volevo.
Il mio problema attuale è supportare 'per ... nelle' mie classi NativeJavaObject. Quando ho valutare
'for(var prop in myClass){printf(prop);};' ,
esso restituisce 'no 'a' invito a non-oggetto' errore.
Sembra che la funzione di 'arrivare' il tentativo di cercare un oggetto di '_ iteratore _', ma si è tradotto in 'non trovato' a get(). Quindi, finisce con l'eccezione. . Finora, ho cercato
- aggiunto java.util.Iterator
- this.getIds di ritorno() GetEnumrator();
Nessuno dei lavori.
Come è possibile consentire l'accesso di enumrate di proprietà per Wrapped NativeJavaObject? Qual è il valore di ritorno previsto di Rhino di '_ iteratore _' abilitare 'per ... in'?
Grazie in anticipo!
Grazie mille. "__iterator___" cercava una funzione da elaborare, non l'oggetto autonomo. Proverò anche con setLanguageVersion (170). Grazie ancora per aver fornito informazioni molto utili! –
Alla fine ho eseguito l'iterazione di NativeJavaObject creando la classe Iterator come 'ScriptableObject'. Ora esegue 'for (var a in document) {}' e 'if (' location 'nella finestra) {}'. Grazie ancora! –
@ Sì, prego. Scripting felice. –