perhaps try :
itemFilter = imodel.itemFilterDefault.apply( imodel  ,args); //

On Mon, Dec 2, 2024 at 3:08 PM Maria Jose Esteve <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>
> 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