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> 
Enviado el: lunes, 2 de diciembre de 2024 0:09
Para: 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> 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> Enviado el: domingo, 1 de 
> diciembre de 2024 21:50
> Para: 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>
> 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> Enviado el: viernes, 29 
> > de noviembre de 2024 18:14
> > Para: 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>
> > 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
> > >
> > >
> >
>

Reply via email to