我试图弄清楚如何使用动态的、客户端驱动的“上下文”来更新挂毯区域。我对 Tapestry 还很陌生,目前我一直使用 5.0。

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

一个问题是该区域以及控制该区域的任何元素最终都会出现在 jquery 对话框中。$jquery(...).dailog() 倾向于将元素的 html 剪切/粘贴到另一个位置,这可能会破坏某些内容。然而,即使在 jquery 对话框之外,我也无法让事情正常工作。

这是我尝试过的,但似乎不起作用(也许我做错了):

  • 创建绑定到区域的eventlink,并修改href。Tapestry 似乎使用存储在某处的变量来代替 .
  • 创建绑定到该区域的 t:form。当我尝试更新它时,我可以知道正在发生服务器端事件,但挂毯区域没有按应有的方式更改或更新。该区域位于表单外部并与表单分开。当区域更新时,我什至没有看到典型的黄色闪烁。
有帮助吗?

解决方案

我发现一些示例代码几乎可以解决我的问题;它没有起作用,但是当我在此处输入问题时,我发现出了什么问题。由于很可能其他人也遇到了这个问题,我在这里发布一个答案:

        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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top