我已经使用 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>
所以,我们的墙有一 block 好砖和一 block 坏砖。为了给出一些上下文,假设好类和坏类都对布局进行操作,例如为好的类添加 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 中,我丢失了控制我的布局的类。这两种选择在我看来都是 Not Acceptable ,但我不知道适合它们的解决方案。
似乎我可以对积木面板进行子类化,这样我就有了一 block 好积木和一 block 坏积木面板,但是这个解决方案所需的代码量非常大。
帮忙吗?
最佳答案
(ignore the Java side, I don't believe it is relevant)
实际上,在 Java 端干净地执行此操作实际上可能是最简单的。
在“墙”组件的代码中,您可能有如下内容:
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 只会添加“好”或“坏”。
当然你也可以子类化,区分两者的代码量相当于在两个子类中使用不同的属性附加程序调用,所以它确实不是很糟糕。
关于java - 您如何维护 wicket 中面板的样式信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160522/