Hello Christophe,
that really works great; thanks for the advice. Do you also know how I can "reedelgate" JAvascript array methods like pop, shift et al. Thanks for help Normen "Christophe Grand" <[EMAIL PROTECTED]> schrieb im Newsbeitrag news:[EMAIL PROTECTED] > Normen a écrit : >>> Do you try to expose an indexed property? (A property which, according >>> to java beans conventions would be: getFlags(int i)... and that in >>> javascript you'd like to expose as flags[i]?) >> >> exactly this is what iam trying to do! > > Ok, your trouble comes from the fact that "x = this.flags[2]" is > equivalent to : > var flags = this.flags; > x = flags[2]; // no more reference to "this" > > So your jsGet_flags() need to return something thas is array-like and that > remembers where it comes from. > > Given your code sample, one way to do this is to use an > org.mozilla.javascript.Delegator. > > private String[] flags; > public Object jsGet_flags() > { > Scriptable scope = ScriptableObject.getTopLevelScope(this); > Context cx = Context.getCurrentContext(); > Scriptable array = cx.newObject(scope, "Array", this.flags.length); > > return new Delegator(array) { > > public Object get(int index, Scriptable start) { > // TODO: if index is out of bounds, call super.get... or > return Scriptable.NOT_FOUND; > return ParentClassName.this.flags[index]; > } > > // you also need to override has(int, Scriptable) and put(int, Scriptable, > Object); > // ... > }; > } > > Hope this helps. > > Christophe
_______________________________________________ dev-tech-js-engine-rhino mailing list [email protected] https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino
