3 Stimmen

Mehrfache Verwendung einer benutzerdefinierten Komponente, die eine Zone enthält

Ich stehe vor einem Problem, wenn ich Tapestry 5.2.0 verwende: Ich verwende mehrfach eine Komponente, die eine Zone enthält.

Zu diesem Zeitpunkt wird die Komponente dreimal auf der gleichen Seite verwendet, aber nur eine Instanz funktioniert gut. Die tml, die mit der Komponente verbunden ist, sieht folgendermaßen aus:

<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
    <t:zone t:id="myZoneId">
        <!-- component's zone content goes there -->
    </t:zone>
</t:container>

Die Ursache für dieses Problem ist ganz einfach: Wenn wir diese Komponente mehrfach auf derselben Seite verwenden, ist die Zonenkennung nicht eindeutig, und es sind mehrere Zonen mit derselben Kennung auf der Seite vorhanden.

Nun meine Frage: Wie kann man die Zonenkennung in der Komponente eindeutig machen, wenn die Komponente einmal oder mehrmals verwendet wird, ohne die Zone außerhalb des Containers zu verwenden?

Ich danke Ihnen im Voraus für Ihre Ideen.

3voto

Henning Punkte 15543

Sie müssen die Zonen-IDs manuell eingeben, da sonst alle mit einer automatisch generierten Client-ID enden.

In Ihrer TML können Sie die id Attribut (ohne das t: Namespace), der dann im gerenderten Markup unverändert verwendet wird:

<t:zone t:id="myZoneId" id="${zoneClientId}">
    ...
</t:zone>

Wenn in Ihrer Komponente ein eindeutiger Wert vorhanden ist (z. B. eine ID), verwenden Sie diesen, um die clientseitige ID zu erstellen:

@Parameter
private MyType myParam;

public String getZoneClientId() {
    return "myZone-" + myParam.getId();
}

Sie können dann die gleiche Getter-Methode für die zone Parameter auf Ihren Links oder Formularen, die die Zone ebenfalls aktualisieren:

<a t:type="ActionLink" t:zone="prop:zoneClientId">...</a>

Wenn der Link oder das Formular innerhalb der Zone selbst enthalten ist, gibt es eine noch einfachere Lösung:

<t:zone t:id="myZoneId">
   ...
   <a t:type="ActionLink" t:zone="^">...</a>
</t:zone>

Der besondere Wert ^ veranlasst Tapestry, die erste umschließende Zone als das zu aktualisierende Element zu verwenden.

Werfen Sie auch einen Blick auf den Abschnitt Ajax und Zonen in den Dokumenten in der einige dieser Punkte ausführlicher erläutert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X