5 Stimmen

Regelmäßige Auffrischung einer Tapestry-Zone

Wie kann ich eine Tapestry-Zone am besten regelmäßig aktualisieren, um Änderungen an einem Datensatz von einem Server zu beziehen?

4voto

Henning Punkte 15543

Sie können die Prototype-Funktion ZeitschriftExecuter und lassen Sie diese den ZoneManager von Tapestry aufrufen, um die Zone zu aktualisieren:

new PeriodicalExecuter(function(pe) {
    var zoneObject = Tapestry.findZoneManager(element);
    zoneObject.updateFromUrl(updateUrl);
}, 5);

3voto

pstanton Punkte 32494

Zunächst müssen Sie die URL für Ihren Event-Handler offenlegen:

public String getModeChangedUrl()
{
    // will call the onModeChanged method
    return resources.createEventLink("ModeChanged").toAbsoluteURI();
}

Weisen Sie dann in einem Javascript-Block in Ihrer tml die Url einer Variablen zu:

var modeChangedUrl = "${modeChangedUrl}";

Dann müssen Sie ein Handle auf ein ZoneManager-Javascript-Objekt erhalten:

var zm = Tapestry.findZoneManagerForZone(zoneId);

Es ist nicht wichtig, welche Zone Sie den ZoneManager für, alles, was dies tut, ist der Ajax-Callback zu erleichtern. Wenn der Ereignis-Listener ein MultiZoneUpdate oder ein Update für eine andere Zone zurückgibt, wird es korrekt behandelt.

Ich verwende eine Dummy-Zone für das Marshalling und gebe immer ein MultiZoneUpdate zurück, auch wenn ich nur eine Zone aktualisiere. Da ich meistens mehrere Zonen aktualisieren muss, finde ich es einfacher, in meinem Ansatz konsistent zu sein. Das ist allerdings ein wenig off topic für Ihre Frage.

Wenn Sie zusätzliche Parameter für den Event-Handler haben, können Sie diese an die Url anhängen, getrennt durch '/', z.B. "http://www.host.com/app/page/event/param1/param2".

jetzt, da Sie die url und eine ZoneManager können Sie die Anfrage-Antwort-Schleife initialisieren:

zm.updateFromURL(url);

wie Henning vorschlug, in Kombination mit dem ZeitschriftExecuter im Prototyp erreichen, was Sie wollen:

new PeriodicalExecuter(function(pe)
    {
        var zm = Tapestry.findZoneManagerForZone("anyZoneId");
        zm.updateFromUrl(url);
    }, 5);

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