gpt4 book ai didi

components - 多次使用包含区域的自定义组件

转载 作者:行者123 更新时间:2023-12-05 04:18:54 25 4
gpt4 key购买 nike

我在使用 Tapestry 5.2.0 时遇到问题:多次使用包含区域的组件。

此时,该组件在同一页面上使用了 3 次,但只有一个实例运行良好。与组件关联的 tml 看起来是这样的:

<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
<t:zone t:id="myZoneId">
<!-- component's zone content goes there -->
</t:zone>
</t:container>

这个问题的原因很简单,我们可以看到,如果我们在同一个页面多次使用这个组件,那么zone id就不会是唯一的,会出现多个相同id的zone页面。

现在这是我的问题:可以使用什么方法来使组件中的区域 ID 唯一,只要组件被使用一次或多次并且不使用容器外部的区域。

预先感谢您的想法。

最佳答案

您必须手动处理区域 ID,否则它们都将以自动生成的客户端 ID 结尾。

在您的 TML 中,您也可以指定 id 属性(没有 t: 命名空间),然后在呈现的标记中按原样使用:

<t:zone t:id="myZoneId" id="${zoneClientId}">
...
</t:zone>

如果您的组件中存在某种唯一值(例如 ID),请使用它来构建客户端 ID:

@Parameter
private MyType myParam;

public String getZoneClientId() {
return "myZone-" + myParam.getId();
}

然后您可以对更新区域的链接或表单上的 zone 参数使用相同的 getter 方法:

<a t:type="ActionLink" t:zone="prop:zoneClientId">...</a>

如果链接或表单包含在区域本身内,则有一个更简单的解决方案:

<t:zone t:id="myZoneId">
...
<a t:type="ActionLink" t:zone="^">...</a>
</t:zone>

特殊值 ^ 导致 Tapestry 使用第一个封闭区域作为要更新的元素。

另请查看 the Ajax and Zones section in the docs ,其中更详细地解释了其中的一些内容。

关于components - 多次使用包含区域的自定义组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com