1

我们正在使用 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)
        { . . . . . . 

然后我们向这个 LinkIconPanel 事物添加一个 html 属性(类)。之后,我们的计划是编写一个 jquery 函数来查看树上的那个类,然后更改显示文本的 <td>(或者实际上是 <span>)标签的颜色。但是,我们得到的最终标记类似于以下内容:

< td class="myClass" . . . .>
  < wicket:panel ....>
    < table . . . >
      < tbody . . . >
        < tr . . . >
          < td . . . >
            < a ...>
              < span > my text that I want to change the color < /span >

我可以访问最外层的 td 标记(在上面的顶部),但无法访问我的 Java Wicket 代码中的内部标记。所以我只是将 myClass 从检票口代码插入到最外层的 td 标记中,并希望从客户端的 jquery 端处理颜色。看起来(从我的 css 代码)我无法从 jquery(或 css)访问 <table> 标签,因为两者之间有一个 <wicket:panel> 标签。

所以我的问题是: 1. 有没有更好的方法来改变 LinkTree 节点的颜色?2.如果这是我应该走的路,我怎样才能从css到达那个<span>标签?我不能使用 RenderBodyOnly(true) 因为我没有在我的代码中手动添加树节点并且我无法访问节点(要作为节点添加的项目)。LinkTree 为我做到了。

我会很感激任何帮助。谢谢。

4

2 回答 2

0

我使用 SimpleAttributeModifier 来修改我的 html 标记中的 css,如下所示:

示例.css:

span.new-yellow { background: #dadada; color: #dddd55 }

例子.java:

SimpleAttributeModifier sam = new SimpleAttributeModifier("class", ".alt-yellow");
if(node.) {
    exampleComponent.add(sam);
}

也许您可以在节点上创建一个模型以指示它是“新的”并在这种情况下添加 SimpleAttributeModifier?

另一种选择可能是使用 HeaderContributor 执行以下操作:

        add(new HeaderContributor(new IHeaderContributor() {
            public void renderHead(IHeaderResponse response) {
                response.renderOnLoadJavascript("document.getElementById('" + node.getMarkupId() + "').YOUR_JAVASCRIPT_HERE");
            }
        }));

再想一想,这可能对 Ajax 不友好。无论如何,只是一些想法。祝你好运!

于 2012-11-06T19:15:59.630 回答
0

覆盖 LinkIconPanel 的 newContentComponent 方法。提供一个新的 Label 但覆盖其 onComponentTag 方法,添加类属性和一个值。

@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 属性来为文本着色。

于 2012-11-07T15:00:26.430 回答