dynamischer Aufruf

Hier geht es um die Programmierung mit der Laszlo Markup Language

Moderators: DanteTHB, SebastianWagner

dynamischer Aufruf

Postby dkoenig on 14.01.2010 11:45

Moin moin,

ich hab eine Klasse:
<class name="prozess">
....

und nutz sie natuerlich auch:
<prozess name="prozess1"/>
<prozess name="prozess2"/>
.....

Ich moecht jetzt innerhalb von Prozess1 Methoden von Prozess2 ausfuehren. Das geht indem ich hart
z.B. im Prozess1 den Aufruf: Prozess2.Viewname.Methodenname() aufrufe. Allerdings soll das Ganze
dynamisch geschehen und Prozess1 kennt Prozess2 nur aus einer Variablen X. Wie muss ein Aufruf dann
erfolgen? X.Viewname.Methodenname() geht ja nicht.

Vielen Dank!
Dominik
dkoenig
Laszlo-Schlumpf
 
Posts: 3
Joined: 14.01.2010 11:32

Re: dynamischer Aufruf

Postby LaSlow on 14.01.2010 12:09

Hi,
meinst Du sowas hier:
Code: Select all
<canvas>

   <class name="prozess">
      <attribute name="otherProcess" />
   </class>

   <prozess name="prozess1" otherProcess="$once{parent.prozess2}" >
      <handler name="onotherProcess">
      <![CDATA[
         Debug.write(this, "->onotherProcess(): otherProcess: ", this.otherProcess);
         this.otherProcess.test();
      ]]>
      </handler>
      
      <method name="test">
      <![CDATA[
         Debug.write(this, "->test()");
      ]]>
      </method>
   </prozess>
   
   <prozess name="prozess2" otherProcess="$once{parent.prozess1}">
      <handler name="onotherProcess">
      <![CDATA[
         Debug.write(this, "->onotherProcess(): otherProcess: ", this.otherProcess);
         this.otherProcess.test();
      ]]>
      </handler>
      
      <method name="test">
      <![CDATA[
         Debug.write(this, "->test()");
      ]]>
      </method>
   </prozess>
   
</canvas>


Ich hoffe das hilft Dir weiter.
LaSlow
Laszlo-Member
 
Posts: 31
Joined: 30.08.2007 16:01

Re: dynamischer Aufruf

Postby dkoenig on 14.01.2010 15:02

Ehrlich, ich habs nicht richtig verstanden.
Ich denk mal der Punkt um den es sich letztendlich dreht ist das Attribute mit seiner Auspraegung: $once{parent.prozess2}

Was bedeutet $once ?
Und ich hab ja nicht nur 2 Prozesse sondern recht viele. Sprich, prozess1 in dem Beispiel muss evtl auch eine Methode von Prozess3 ansprechen oder von Prozesse4 oder oder ... welchen genau steht in einer Variable p (deren Inhalt ich aus einer DB zieh)

Muss ich da mit setAttribute das Attribute entsprechend zur Laufzeit setzten?
prozess1.setAttribute('otherprocess',"$once{parent.prozess3}")

bzw da der Wert aus der Variablen P kommt (in der jetzt mal "process3" drin stehen soll), geht sowas wie:
prozess1.setAttribute('otherprocess',"$once{P}")

Vielen Dank!
dkoenig
Laszlo-Schlumpf
 
Posts: 3
Joined: 14.01.2010 11:32

Re: dynamischer Aufruf

Postby LaSlow on 14.01.2010 15:12

$once bedeutet das dieses Attribute nur gesetzt wird wenn die Klasse initialisiert wird.
Siehe: http://www.openlaszlo.org/lps4.5/docs/developers/constraints.html

Wenn Du die Variable wärend der Laufzeit setzen willst schreibst Du einfach:
Code: Select all
prozess1.setAttribute('otherprocess', parent.prozess2);
// bzw.
prozess1.setAttribute('otherprocess', parent[P]);
// parent[P] ist gleich mit parent['process3']
LaSlow
Laszlo-Member
 
Posts: 31
Joined: 30.08.2007 16:01

Re: dynamischer Aufruf

Postby dkoenig on 14.01.2010 15:17

Super, so wirds gehen.

Vielen Dank nochmal!
dkoenig
Laszlo-Schlumpf
 
Posts: 3
Joined: 14.01.2010 11:32


Return to Allgemeine Coding Help

Who is online

Users browsing this forum: No registered users and 1 guest

cron