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

Reply via email to