首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改wicket链接树节点的颜色?

如何更改wicket链接树节点的颜色?
EN

Stack Overflow用户
提问于 2012-11-06 21:35:35
回答 2查看 706关注 0票数 1

我们使用wicket LinkTree。一旦构建了树并在页面上呈现,我们就可以在应用程序中动态地向树中添加新节点。当添加新节点时,我们希望用不同的颜色(例如红色)显示新添加的节点。

我们采取的一种方法(但没有奏效)如下所示。我们扩展LinkTree类并覆盖newNodeComponent方法,如下所示。

代码语言:javascript
复制
@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 >)标记的颜色。但是,我们最终得到的标记如下所示:

代码语言:javascript
复制
< 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插入到来自wicket代码的最外层的td标记中,并希望在客户端处理来自jQuery端的颜色。看起来(从我的css代码中)我无法从jquery (或css)到达< table>标记,因为在它们之间有一个< wicket:panel >标记。

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

如果能帮上忙我会很感激的。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-11-07 03:16:00

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

example.css:

代码语言:javascript
复制
span.new-yellow { background: #dadada; color: #dddd55 }

example.java:

代码语言:javascript
复制
SimpleAttributeModifier sam = new SimpleAttributeModifier("class", ".alt-yellow");
if(node.) {
    exampleComponent.add(sam);
}

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

另一种选择是使用HeaderContributor按照以下方式执行某些操作:

代码语言:javascript
复制
        add(new HeaderContributor(new IHeaderContributor() {
            public void renderHead(IHeaderResponse response) {
                response.renderOnLoadJavascript("document.getElementById('" + node.getMarkupId() + "').YOUR_JAVASCRIPT_HERE");
            }
        }));

转念一想,这可能对Ajax不友好。不管怎样,只是一些想法。祝好运!

票数 0
EN

Stack Overflow用户

发布于 2012-11-07 23:00:26

重写LinkIconPanel的newContentComponent方法。提供一个新的标签,但是覆盖它的onComponentTag方法,添加类属性和值。

代码语言:javascript
复制
@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:

代码语言:javascript
复制
< a >
       < span class="colourMe"> my text that I want to change the color < /span >
</ a >

不需要jquery,只需使用class属性为文本着色即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13252180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档