0

動的なクライアント側駆動の「コンテキスト」を使用してタペストリーゾーンを更新する方法を理解しようとしています。私はタペストリーにかなり慣れていません、そして私は今のところ5.0で立ち往生しています。

これを行う主な理由は、タペストリーコンポーネントを書き直すことなく、jqueryダイアログの子として別のタペストリーコンポーネントを再利用することです。

1つの問題は、ゾーンとそれを制御する要素がjqueryダイアログ内に配置されることです。$ jquery(...)。dailog()は、要素のhtmlを別の場所にカットアンドペーストする傾向があり、何かを壊している可能性があります。ただし、jqueryダイアログの外でも動作させることができませんでした。

これが私が試したものですが、うまくいかなかったようです(おそらく私は間違っていました):

  • ゾーンにバインドされたイベントリンクを作成し、hrefを変更します。タペストリーは、ため息の代わりにどこかに保存されている変数を使用しているようです。
  • ゾーンにバインドされたat:formを作成します。更新しようとすると、サーバー側のイベントが発生していることがわかりますが、タペストリーゾーンが変更または更新されません。ゾーンはフォームの外側にあり、フォームとは別です。ゾーンが更新されたときに、典型的な黄色の点滅すら表示されません。
4

1 に答える 1

0

私の問題をほぼ解決するサンプルコードをいくつか見つけました。動作していませんでしたが、SOで質​​問を入力すると、何が問題なのかがわかりました。他の誰かがこの問題に遭遇した可能性があるので、私はここに答えを投稿します:

        var zoneId = "itemZone"; // tml was <t:zone id="itemZone"...>
        var zoneObject = Tapestry.findZoneManagerForZone(zoneId);
        zoneObject.updateFromURL(url);

jquery .dialog()がhtmlを移動する問題を解決するには、次のようにゾーンマネージャーもコピーして保存する必要があります(プロトタイプの競合を避けるために、$ J(...)はjqueryの省略形です)

    prototypeStorageObj = $T("itemZone");
    zoneManager = prototypeStorageObj.zoneManager;
    // jquery stuff that kills the prototype data storage.
    emailForm = $J("#myDialog");
    emailForm.dialog({ autoOpen: false, modal:true });
    emailForm.dialog('open');
    // restore the zone manager so the zone works again:
    $T("itemZone").zoneManager = zoneManager;
于 2012-07-28T22:34:48.957 に答える