2009-06-22 6 views

risposta

4

Si potrebbe utilizzare Prototype di PeriodicalExecuter, e che hanno chiamano ZoneManager di Tapestry per aggiornare la zona:

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

typeo "PeriodicalExecutor" -> "PeriodicalExecuter" – pstanton

+0

@pstanton: tutto risolto. – Henning

3

In primo luogo, è necessario esporre l'URL per il gestore di eventi:

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

Quindi, in un blocco javascript nel tuo tml, assegna l'url a una variabile:

var modeChangedUrl = "${modeChangedUrl}"; 

allora avete bisogno di ottenere un handle a uno ZoneManager javascript oggetto:

var zm = Tapestry.findZoneManagerForZone(zoneId); 

Non è importante quale zona si ottiene la ZoneManager per, tutto questo non fa altro facilitare il callback ajax. Se il listener di eventi restituisce un MultiZoneUpdate o un aggiornamento per una zona diversa, verrà gestito correttamente.

Io uso una zona fittizia per il marshalling e restituisco sempre un MultiZoneUpdate anche se sto aggiornando solo una zona. Dato che il più delle volte ho bisogno di aggiornare più zone, trovo più facile essere coerenti nel mio approccio. comunque, questo è un po 'fuori tema per la tua domanda.

se si dispone di parametri aggiuntivi per il gestore di eventi, è possibile accodare all'URL separati da '/' vale a dire "http://www.host.com/app/page/event/param1/param2"

ora che avete la url e ZoneManager, è possibile inizializzare il ciclo di richiesta-risposta:

zm.updateFromURL(url); 

come Henning suggerito, combinando questo con la PeriodicalExecuter nel prototipo sarà ottenere quello che vuoi:

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

questo è leggermente cambiato da T5.2. MultiZoneUpdate è una cosa del passato. la roba lato client è in gran parte lo stesso però. – pstanton

Problemi correlati