java - 向 Wicket 中的 dom 添加动态元素 ID
问题描述
我有一个重复的视图,里面有一个容器。另外,我在这个容器中添加了带有行为的元素。
RepeatingView listItems = new RepeatingView("listItems");
listItems.setOutputMarkupId(true);
listItems.setRenderBodyOnly(true);
for (int i = 0; i < typeList.size(); i++) {
WebMarkupContainer container = new WebMarkupContainer(listItems.newChildId());
container.setOutputMarkupId(true);
Label typeLabel = (Label) new Label("typeLabel" + i, "label");
container.add(typeLabel);
container.add(createMultiChoiceForCustomType("choice" + i, i));
listItems.add(container);
}
add(listItems);
和 HTML
<div class="otherPermissionsOption">
<div wicket:id="listItems"></div>
</div>
我在控制台中有一个错误
Wicket.Ajax:无法为元素“id13c”上的事件“change.select2”绑定侦听器,因为该元素不在 DOM 中
如何在 HTML 页面上放置动态容器+元素 ID 以消除此错误?是否可以在 Wicket 中使用动态容器?
解决方案
listItems.setOutputMarkupId(true);
listItems.setRenderBodyOnly(true);
这两行是矛盾的。
listItems.setOutputMarkupId(true);
说 - 我希望 Wicket 为id
HTML 元素添加属性并为其生成唯一值
listItems.setRenderBodyOnly(true);
说 - 我不需要 HTML 元素标记(将其所有属性)。我希望 Wicket 只呈现该组件的子组件。您需要将其删除。
您的标记应包含子级的 HTML 元素:
<div class="otherPermissionsOption">
<div wicket:id="listItems">
<span wicket:id="typeLabel"></span>
<div wicket:id="choice"></div>
</div>
</div>
并且不需要+ i
在 Java 代码中添加组件 id。
也不需要在以下位置进行投射:
... = (Label) new Label("typeLabel" + i, "label");
推荐阅读
- javascript - 获取函数参数名称JS
- apache-spark - 如何使用 pyspark 并行插入 Hive
- javascript - 为什么我不能将函数的结果用作 useState 中的状态
- python - Python - 实时更新图;使用 matplotlib
- apache-beam - Google DataFlow Batch 类型作业卡在 BigQueryIO.Write/StreamingInserts 步骤
- php - 如何构建 PHP 类
- google-docs-api - 通过 Google Docs API 更新 namedStyles
- python - 如何按字母顺序python遍历二叉搜索树?
- node.js - 如何在 AWS Elastic Beanstalk 上的 Nodejs 应用程序上启用大文件的上传?
- android - 我的 Bmi 计算器应用程序 - kotlin 出了什么问题?