我们正在使用wicket LinkTree。一旦在页面上构造和呈现树,我们就可以在应用程序中动态地将新节点添加到树中。添加新节点时,我们希望使用不同的颜色(例如红色)显示新添加的节点。
我们采取的一种方法(但没有奏效)如下。我们扩展LinkTree类并覆盖newNodeComponent方法,如下所示。
@Override
protected Component newNodeComponent(String id, IModel<Object> model) {
return new LinkIconPanel(id, model, TalepTreeForTTBina.this) {
private static final long serialVersionUID = 4518741854057038753L;
@Override
protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target)
{ . . . . . .
然后我们将一个html属性(类)添加到此LinkIconPanel事物中。之后,我们的计划是编写一个jquery函数来查看树上的那个类,然后改变&lt;的颜色。 td&gt; (或实际上是&lt; span&gt;)标记,其中显示了文本。但是,我们得到的最终标记如下:
< td class="myClass" . . . .>
< wicket:panel ....>
< table . . . >
< tbody . . . >
< tr . . . >
< td . . . >
< a ...>
< span > my text that I want to change the color < /span >
我可以访问最外面的td标记(在上面的顶部),但是无法访问我的Java Wicket代码中的内部标记。所以我只是从wicket代码中插入myClass到最外层的td标签,并希望从客户端的jquery端处理颜色。看起来(从我的css代码)我无法达到&lt;表&gt;来自jquery(或css)的标记,因为有一个&lt;检票口:面板&gt;介于两者之间。
所以我的问题是: 1.有更好的方法来更改LinkTree节点的颜色吗? 如果这是我应该去的方式,我怎么能达到那个&lt; span&gt;来自CSS的标签?我不能使用RenderBodyOnly(true)因为我没有在我的代码中手动添加树节点而我无法访问节点(要添加为节点的项目)。 LinkTree为我做到了。
我很感激任何帮助。感谢。
答案 0 :(得分:0)
我使用SimpleAttributeModifier来修改我的html标记中的css,如下所示:
example.css:
span.new-yellow { background: #dadada; color: #dddd55 }
example.java:
SimpleAttributeModifier sam = new SimpleAttributeModifier("class", ".alt-yellow");
if(node.) {
exampleComponent.add(sam);
}
也许您可以在节点上创建一个模型来表明它是“new”并在这种情况下添加SimpleAttributeModifier?
另一种选择可能是使用HeaderContributor来执行以下操作:
add(new HeaderContributor(new IHeaderContributor() {
public void renderHead(IHeaderResponse response) {
response.renderOnLoadJavascript("document.getElementById('" + node.getMarkupId() + "').YOUR_JAVASCRIPT_HERE");
}
}));
第二个想法,那可能不是Ajax友好的。无论如何,只是一些想法。祝你好运!
答案 1 :(得分:0)
重写LinkIconPanel的newContentComponent方法。提供一个新的Label但覆盖其onComponentTag方法,添加class属性和值。
@Override
protected Component newContentComponent(String componentId, BaseTree tree,
IModel<?> model)
{
return new Label(componentId, model)
{
@Override
protected void onComponentTag(ComponentTag tag)
{
tag.put("class", "colourMe");
super.onComponentTag(tag);
}
};
}
这会将class属性添加到span标记并像这样呈现html:
< a >
< span class="colourMe"> my text that I want to change the color < /span >
</ a >
不需要jquery,您只需使用class属性为文本着色。