Diese Frage ist über gute Wicket Design. Wir haben verschiedene Möglichkeiten, wie wir es umsetzen können, aber wir möchten einige Ideen bekommen, wie wir es besser gestalten können. Wir wollen einfach ein einfaches TimerPanel mit einem Label und einem Timer (eine Art StopWatch) bauen.Erstellen Sie benutzerdefinierte Komponente Modell (TimerPanel)
Wie sollten wir sein Modell entwerfen. Sicher brauchen wir die IModel<LocalDateTime> timerUntil
. Aber wie können wir den Text des Labels im TimerPanel definieren?
Das TimerPanel wird in einem ParentPanel verwendet. Die ParentPanel hat ein Modell wie folgt aus:
public class ParentDto {
private LocalDateTime timerAValidUntil;
private LocalDateTime timerBValidUntil;
}
Da die ParentDto keine Informationen über das Label des TimerPanel haben, wird die folgende
new PropertyModel(getDefaultModel(), "timerAValidUntil")
nicht genug.
Hier ist die die Frage: Sollten wir eine feste wicketId definieren, sagen wir timerLabel
für das Label in der TimerPanel
, und die Eltern-Panel hat es in seiner Panel.properties.xml
zu definieren?. Wie (A Option)
timerPanelA:timerLabel
oder ist besser, eine neue ModelObject, wie (Option B)
public class TimerDto() {
String timerLabel;
IModel<LocalDateTime> timerValidUntil;
}
Wir sind immer zu schaffen versuchen, unsere Modelle zu verbinden, so dass, wenn wir ändern Das ModelObject in einem Panel wird auch in allen abhängigen Panels geändert. Bitte teilen Sie Ihr Wissen ... Thx.