你如何维护检票口的面板样式信息?

时间:2014-04-18 19:01:58

标签: java css wicket

现在和Wicket合作了几个星期,我很难在标记面板上维护样式的最佳方法。例如,假装我有以下面板(忽略Java方面,我认为不相关):

<wicket:panel>
  <div class="brick"></div>
</wicket:panel>

现在我正在构建一个新组件,如下所示:

<wicket:panel>
  <div class="wall">
    <div wicket:id="aBrick" class="good"></div>
    <div wicket:id="bBrick" class="bad"></div>
  </div>
</wicket:panel>

所以,我们的墙有一块好砖和坏砖。为了给出一些上下文,假设类的优缺点为布局做了些事情,比如为好类添加float:left,为坏类添加float:right。理想情况下,最终标记显示如下:

<div class="wall">
  <div class="brick good"></div>
  <div class="brick bad"></div>
</div>

但是,使用当前代码,我似乎只限于以下两个选项之一:

A)输出所有标记,最终标记显示如下:

<div class="wall">
  <div class="good">
    <div class="brick"></div>
  </div>
  <div class="bad">
    <div class="brick"></div>
  </div>
</div>
  • 或 -

B)在砖块上调用setRenderBodyOnly(true),最终标记显示如下:

<div class="wall">
  <div class="brick"></div>
  <div class="brick"></div>
</div>

在选项A中,我现在有一个额外的包装div,我不想要它可能会或可能不会弄乱我的布局。在选项B中,我丢失了控制我的布局的类。这两个选项在我看来是不可接受的,但我不知道它们的适当解决方案。

似乎我可以对砖面板进行子类化,以便我有一块好的砖和一块坏的砖面板,但这个解决方案所需的代码量是非常的。

帮助?

2 个答案:

答案 0 :(得分:0)

  

(忽略Java方面,我认为不相关)

实际上,实际上最简单的方法是在Java端干净地完成这项工作。

在“wall”组件的代码中,您可能会遇到类似的内容:

add(new BrickPanel("abrick", ... );
add(new BrickPanel("bbrick", ... );

您可以使用AttributeAppender在Java中添加不同的类:

BrickPanel a = new BrickPanel("abrick", ... );
BrickPanel b = new BrickPanel("bbrick", ... );
a.add(new AttributeAppender("class", "good"));
b.add(new AttributeAppender("class", "bad"));
add(a);
add(b);

如果它们共享一个共同的“brick”类属性,则可以将其保留在共享标记中。这个appender只会添加“好”或“坏”。

当然,你也可以是子类,并且区分这两者的代码量相当于在两个子类中使用不同的属性appender调用,所以它确实不是很残忍。

答案 1 :(得分:0)

使用此标记:

<wicket:panel>
  <div class="wall">
    <div wicket:id="goodBrickPanel"></div> 
    <div wicket:id="badBrickPanel"></div>
  </div>
</wicket:panel>

创建z BrickPanel并在那里设置类:

class BrickPanel extends Panel
{
    public BrickPanel(String id, boolean someCondition)
    {
        super(id);
        String cssClass = "brick " + someCondition ? "good" : "bad";
        add(AttributeModifier.replace("class", cssClass));
    }
}

PS。尽可能避免setRenderBodyOnly(true)。您将来可能需要这个标签用于样式或ajax更新。