5

タペストリーゾーンを定期的に更新して、サーバーからデータセットの変更をプルするための最良の方法は何ですか?

4

2 に答える 2

4

Prototype のPeriodicalExecuterを使用して、Tapestry の ZoneManager を呼び出してゾーンを更新することができます。

new PeriodicalExecuter(function(pe) {
    var zoneObject = Tapestry.findZoneManager(element);
    zoneObject.updateFromUrl(updateUrl);
}, 5);
于 2009-06-24T09:08:27.527 に答える
3

まず、イベント ハンドラーの URL を公開する必要があります。

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

次に、tml の JavaScript ブロックで、URL を変数に割り当てます。

var modeChangedUrl = "${modeChangedUrl}";

次に、ZoneManager JavaScript オブジェクトへのハンドルを取得する必要があります。

var zm = Tapestry.findZoneManagerForZone(zoneId);

ZoneManager を取得するゾーンは重要ではありません。これが行うのは、ajax コールバックを容易にすることだけです。イベント リスナーが MultiZoneUpdate または別のゾーンの更新を返す場合、正しく処理されます。

マーシャリングにダミー ゾーンを使用し、1 つのゾーンのみを更新している場合でも、常に MultiZoneUpdate を返します。多くの場合、複数のゾーンを更新する必要があるため、アプローチに一貫性を持たせる方が簡単です。とにかく、それはあなたの質問のトピックから少し外れています。

イベント ハンドラに追加のパラメータがある場合は、「/」で区切って URL に追加できます。つまり、「http://www.host.com/app/page/event/param1/param2」のようになります。

urlと ができたのでZoneManager、リクエスト/レスポンス ループを初期化できます。

zm.updateFromURL(url);

ヘニングが示唆したように、これをプロトタイプのPeriodicalExecuterと組み合わせると、必要なものが得られます。

new PeriodicalExecuter(function(pe)
    {
        var zm = Tapestry.findZoneManagerForZone("anyZoneId");
        zm.updateFromUrl(url);
    }, 5);
于 2010-11-16T22:02:31.397 に答える