next up previous contents index
Search Next: Formulare mit IOWA Up: IOWA: Interpreted Objects for Previous: Grundlagen   Contents   Index

Links, Listen und Iteratoren

Links werden bekannterweise mit <a>-Tag angelegt:

<a oid="eintragen">Notiere</a> die Uhrzeit.

Links in IOWA benötigen nur dann ein href-Attribut, wenn sie die Anwendung verlassen. Wird auf eine Seite innerhalb der Anwendung Bezug genommen, geschieht dies mit dem oid-Attribut.[*] Sein Wert legt den Namen der auszuführenden Methode fest:

# gehört zu oid="eintragen"
def eintragen
  @zeiten << Time.now
end

Die Initialisierung der Variablen @zeiten wird in einer eigenen Methode awake vorgenommen, die nur beim ersten Laden der Anwendung aufgerufen wird. Main.html sollte mittlerweile so aussehen:

<%
class Main < Iowa::Component
  attr_reader :zeiten
  def awake
    @zeiten = []
  end
  def time
    Time.now
  end
  def eintragen
    @zeiten << Time.now
  end
end
%>

<html>
<head><title>Hallo</title></head>
<body>
<h1>Hallo Welt!</h1>
<p>Es ist jetzt <b>@time</b>.</p>
<p><a oid="eintragen">Notiere</a> die aktuelle
  Uhrzeit.</p>
</body>
</html>

Über den attr_reader :zeiten kann aus dem HTML-Bereich auf den Wert der zeiten-Variable zugegriffen werden. Um die Liste der Zeiten anzuzeigen, bietet IOWA die Möglichkeit, einer <ul>-Aufzählung eine Methode zuzuweisen, mit der die einzelnen Elemente dynamisch erzeugt werden. Das HTML-Segment sieht folgendermaßen aus:

<ul oid="liste">
<li>@eintrag</li>
</ul>

Der[*] einzelne <li>-Eintrag ist ein Muster, das für jedes Element der Liste mit den entsprechend eingesetzten Werten wiederholt wird. Diese Werte werden über so genannte Bindungen zugeordnet.

<?
liste {
  list = zeiten
  item = eintrag
}
?>

Dynamische Elemente wie <ul> oder auch <table> verwenden die Parameter list und item, um auf die zu Grunde liegende Aufzählung und deren Elemente zuzugreifen. Die Bindung sorgt dafür, dass die im HTML-Bereich verwendeten Bezeichnung den intern von IOWA verwendeten Bezeichnungen korrekt zugeordnet werden.

<%
class Main < Iowa::Component
  attr_reader :zeiten
  attr_accessor :eintrag
  def awake
    @zeiten = []
  end
  def time
    Time.now
  end
  def eintragen
    @zeiten << Time.now
  end
end
%>

<?
liste {
  list = zeiten
  item = eintrag
}
?>

<html>
<head><title>Hallo</title></head>
<body>
<h1>Hallo Welt!</h1>
<p>Es ist jetzt <b>@time</b>.</p>
<p><a oid="eintragen">Notiere</a> die aktuelle
  Uhrzeit.</p>
<p>Die Seite wurde gezeigt um:</p>
<ul oid="liste">
<li>@eintrag</li>
</ul>
</body>
</html>



Footnotes

... oid-Attribut.[*]
oid=object identifier
...Der[*]
IOWA-Dateien = Ruby-Code $+$ Bindings $+$ HTML

next up previous contents index
Search Next: Formulare mit IOWA Up: IOWA: Interpreted Objects for Previous: Grundlagen   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20