使用动态上下文更新挂毯区域

时间:2012-07-28 22:33:03

标签: java ajax tapestry zone

我正试图弄清楚如何使用动态的,客户端驱动的“上下文”来更新挂毯区域。我对挂毯很新,我现在已经坚持5.0了。

执行此操作的主要原因是将另一个tapestry组件重用为jquery对话框的子级,而无需重写tapestry组件。

一个问题是区域和控制它的任何元素最终都在jquery对话框中。 $ jquery(...)。dailog()倾向于将元素的html剪切/粘贴到另一个位置,这可能会破坏某些东西。但是,即使在jquery对话框之外,我也无法工作。

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

  • 创建绑定到区域的eventlink,并修改href。 Tapestry似乎使用存储在某处的变量而不是叹息
  • 创建一个绑定到区域的t:表单。当我尝试更新它时,我可以看出服务器端事件正在发生,但挂毯区域不会更改或更新。该区域位于外部并与表格分开。更新区域时,我甚至看不到典型的黄色闪烁。

1 个答案:

答案 0 :(得分:0)

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

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

要解决jquery .dialog()移动html的问题,我还必须像这样复制和保存区域管理器:(其中$ J(...)是我的jquery的缩写,以避免原型冲突)< / p>

    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;