0

我试图弄清楚如何使用动态的、客户端驱动的“上下文”来更新挂毯区域。我对挂毯相当陌生,我现在坚持使用 5.0。

这样做的主要原因是重用另一个 Tapestry 组件作为 jquery 对话框的子组件,而不必重写 Tapestry 组件。

一个障碍是该区域以及控制它的任何元素最终都在一个 jquery 对话框中。$jquery(...).dailog() 倾向于将元素的 html 剪切/粘贴到另一个位置,这可能会破坏某些东西。但是,即使在 jquery 对话框之外,我也无法让事情正常进行。

这是我尝试过的,似乎没有用(也许我做错了):

  • 创建一个绑定到区域的事件链接,并修改 href。Tapestry 似乎使用存储在某处的变量而不是sigh
  • 创建 at:form 绑定到区域。当我尝试更新它时,我可以知道正在发生服务器端事件,但挂毯区域没有按应有的方式更改或更新。该区域位于外部并与表格分开。更新区域时,我什至看不到典型的黄色闪烁。
4

1 回答 1

0

我找到了一些几乎可以解决我的问题的示例代码;它没有工作,但是当我在这里输入问题时,我看到了问题所在。因为很可能其他人也遇到了这个问题,所以我在这里发布一个答案:

        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 回答