Josh did most of the work here, Maria.This was just a variation on what he showed you earlier. When you use the Function.apply method, you should pass the 'this' reference as the first argument if it is needed. Inside a class instance method a 'this' reference is (usually) necessary because it usually needs to correctly refer to whatever 'this' is inside the function scope. If you're using the apply on a static method or 'global' function, then you would usually pass null here.
So when calling already from within the instance scope (e.g. from one method to another) you would pass 'this' as the first argument. But when calling from an external scope (like the example you had here) you pass a reference to the instance that the method belongs to. On Mon, Dec 2, 2024 at 3:30 PM Maria Jose Esteve <mjest...@iest.com> wrote: > This did the magic. I'll look at the "apply" code to understand it better. > > Thx, thx, thx 😝 > > > > Hiedra > > > > -----Mensaje original----- > De: Greg Dove <greg.d...@gmail.com<mailto:greg.d...@gmail.com>> > Enviado el: lunes, 2 de diciembre de 2024 3:21 > Para: dev@royale.apache.org<mailto:dev@royale.apache.org> > Asunto: Re: Parameters of type paramArray > > > > perhaps try : > > itemFilter = imodel.itemFilterDefault.apply( imodel ,args); // > > > > On Mon, Dec 2, 2024 at 3:08 PM Maria Jose Esteve <mjest...@iest.com > <mailto:mjest...@iest.com>> wrote: > > > > > Ok, I know when the error occurs specifically, but I don't know if > > > this implementation "should work" or if it is just not implemented well. > > > "Exception occurred: TypeError: Cannot read properties of undefined > > > (reading 'apply')" occurs when the function call "...args" belongs to > > > an "Interface". > > > (I have put together this simplified example) > > > > > > public class Controller extends EventDispatcher implements > > > IBeadController { > > > .... > > > protected var _model:IBeadModel; > > > > > > protected function get imodel():IModelArqManager > > > { > > > return MasterConfigSystemModel (_model); > > > } > > > .... > > > protected function > > > checkFilterDelegate(itemFilter:ICTypeArqParams, > > > ... args):ICTypeArqParams > > > { > > > if(!itemFilter){ > > > if(imodel.filterOn && imodel.currentItemFilter!=null) > > > itemFilter = imodel.currentItemFilter.clone(); > > > else > > > itemFilter = > > > imodel.itemFilterDefault.apply(this,args); // [0] (Definition in the > > > Interface [2]) > > > } > > > itemFilter.fieldOrder = imodel.currentFieldSort; > > > return itemFilter; > > > } > > > } > > > > > > I have a Base Model: > > > public class ModelArqManager implements IModelArqManager { > > > ... > > > public function itemFilterDefault(... args):ICTypeArqParams { > > > var item:ICTypeArqParams = > > > retriveNewItemFilterDefault.apply(this, args); // ERROR when called > > > from [0..1] > > > if (pagination) { > > > item.pageSize = pageSize; > > > item.pageIndex = -1; > > > }else{ > > > item.pageSize = -99; > > > item.pageIndex = -99; > > > } > > > return item; > > > } > > > public function retriveNewItemFilterDefault(... > > > args):ICTypeArqParams{ return null; } > > > public function retriveNewItemFilter(... > > > args):ICTypeArqParams{ return null; } > > > > > > } > > > > > > And an extended Model: > > > public class MasterConfigSystemModel extends ModelArqManager { > > > override public function itemFilterDefault(... > > > args):ICTypeArqParams { > > > return super.itemFilterDefault.apply(this,args) as > > > CTypeParMasterConfigSystem; // [1] > > > } > > > override public function retriveNewItemFilterDefault(... > > > args):ICTypeArqParams > > > { > > > var idMaster:int = 0; > > > if(args.length != 0) > > > idMaster = int(args[0]); > > > return new CTypeParMasterConfigSystem(idMaster, > > > pagination, pageSize); > > > } > > > override public function retriveNewItemFilter(... > > > args):ICTypeArqParams > > > { > > > return retriveNewItemFilterDefault.apply(this,args); // > > > This call DOES NOT PRODUCE ERROR > > > } > > > > > > } > > > > > > [2] The "itemFilterDefault" function is defined in the Interface: > > > public interface IModelArqManager { > > > ... > > > function itemFilterDefault(... args):ICTypeArqParams; > > > ... > > > } > > > > > > Thx. > > > Hiedra > > > > > > -----Mensaje original----- > > > De: Josh Tynjala <joshtynj...@bowlerhat.dev<mailto: > joshtynj...@bowlerhat.dev>> Enviado el: lunes, 2 de > > > diciembre de 2024 0:09 > > > Para: dev@royale.apache.org<mailto:dev@royale.apache.org> > > > Asunto: Re: Parameters of type paramArray > > > > > > That is the way that I would have suggested to call other functions. > > > Perhaps this means that there is a bug in the compiler. > > > > > > Does this work? > > > > > > var item:ICTypeArqParams = > > > this.retriveNewItemFilterDefault.apply(this,args); > > > > > > -- > > > Josh Tynjala > > > Bowler Hat LLC <https://bowlerhat.dev> > > > > > > > > > On Sun, Dec 1, 2024 at 2:13 PM Maria Jose Esteve <mjest...@iest.com > <mailto:mjest...@iest.com>> > > > wrote: > > > > > > > Thanks Josh, I understand the concept you are showing me. The > > > > problem I have now, as I mentioned in my previous email, is that it > > > > does not allow me to use apply with calls to functions external to the > override: > > > > > > > > public function itemFilterDefault(... args):ICTypeArqParams { > > > > // I can't implement it like this because I get an error > > > > "retriveNewItemFilterDefault is not a function" > > > > var item:ICTypeArqParams = > > > > retriveNewItemFilterDefault.apply(this,args); > > > > if (pagination) { > > > > item.pageSize = pageSize; > > > > item.pageIndex = -1; > > > > }else{ > > > > item.pageSize = -99; > > > > item.pageIndex = -99; > > > > } > > > > return item; > > > > } > > > > public function retriveNewItemFilterDefault(... > > > > args):ICTypeArqParams{ return null; } // This function is the one > > > > that will normally be overridden in child classes > > > > > > > > In these cases, is there another way to do it? > > > > Thx. > > > > Hiedra > > > > > > > > -----Mensaje original----- > > > > De: Josh Tynjala <joshtynj...@bowlerhat.dev<mailto: > joshtynj...@bowlerhat.dev>> Enviado el: domingo, 1 > > > > de diciembre de 2024 21:50 > > > > Para: dev@royale.apache.org<mailto:dev@royale.apache.org> > > > > Asunto: Re: Parameters of type paramArray > > > > > > > > super.fn_hello.apply(this, [index].concat(args)); > > > > > > > > Alternatively, you can modify the args array. > > > > > > > > args.unshift(index); > > > > super.fn_hello.apply(this, args); > > > > > > > > -- > > > > Josh Tynjala > > > > Bowler Hat LLC <https://bowlerhat.dev> > > > > > > > > > > > > On Sun, Dec 1, 2024 at 6:12 AM Maria Jose Esteve <mjest...@iest.com > <mailto:mjest...@iest.com>> > > > > wrote: > > > > > > > > > Perfect Josh, thanks. > > > > > > > > > > When the paramArray is, for example, the second parameter, what > > > > > would that look like? > > > > > For example: > > > > > override protected function fn_hello(index:int, ... args){ > > > > > // These are the tests I have done but none of them work for > me > > > > > super.fn_hello.apply(index,args); > > > > > super.fn_hello.apply(index,[this].concat(args)); // Add > "this" > > > > > and, for example, index 0 is not the first parameter of args but > > > > > "this" (as expected)} ,,, > > > > > > > > > > Hiedra > > > > > > > > > > -----Mensaje original----- > > > > > De: Josh Tynjala <joshtynj...@bowlerhat.dev<mailto: > joshtynj...@bowlerhat.dev>> Enviado el: viernes, > > > > > 29 de noviembre de 2024 18:14 > > > > > Para: dev@royale.apache.org<mailto:dev@royale.apache.org> > > > > > Asunto: Re: Parameters of type paramArray > > > > > > > > > > I think that this should do what you want: > > > > > > > > > > super.reevalAccesControl.apply(this, args); > > > > > > > > > > > > > > > -- > > > > > Josh Tynjala > > > > > Bowler Hat LLC <https://bowlerhat.dev> > > > > > > > > > > > > > > > On Thu, Nov 28, 2024 at 7:26 AM Maria Jose Esteve > > > > > <mjest...@iest.com<mailto:mjest...@iest.com>> > > > > > wrote: > > > > > > > > > > > Hi, I've always faced this problem, but I don't know how to give > > > > > > a definitive solution. > > > > > > Parameters of type paramarray increase their nesting from one > > > > > > call to another, for example: > > > > > > > > > > > > Public class ControllerFirst extends ControllerBase { > > > > > > ... > > > > > > private function fnmove():void{ > > > > > > var foo:String = "hello"; > > > > > > reevalAccessControl(foo); > > > > > > } > > > > > > ... > > > > > > override protected function reevalAccessControl(... args):void{ > > > > > > // In the first call, from fnmove "arguments" > > > > > > you have an element [0] with a value "hello" > > > > > > super.reevalAccesControl(args); > > > > > > ... > > > > > > } > > > > > > } > > > > > > > > > > > > Public class ControllerBase > > > > > > { > > > > > > ... > > > > > > protected function reevalAccessControl(... args):void{ > > > > > > // When this function is called from > > > > > > ControllerFirst arguments has an element [0] but this element in > > > > > > turn is an array of > > > > > > 1 element and the value "hello" is found in args[0][0] on a > > > > > > second > > > > level > > > > > > ... > > > > > > } > > > > > > ... > > > > > > } > > > > > > > > > > > > I don't know if I have explained myself... I understand why it > > > > > > happens but I wonder if there is a way to pass this type of > > > > > > arguments so that the nesting level 0 is respected and a level > > > > > > is not > > > > added for each call. > > > > > > > > > > > > Thx. > > > > > > Hiedra > > > > > > > > > > > > > > > > > > > > > > > > >