Composite Components
Composite
-komponentti yhdistää olemassa olevia webforJ-komponentteja itse sisällä oleviksi, uudelleenkäytettäviksi komponenteiksi, joilla on mukautettu käyttäytyminen. Käytä sitä kääriäksesi sisäisiä webforJ-komponentteja uudelleenkäytettäviksi liiketoimintalogiikan yksiköiksi, käyttääksesi komponenttimalleja koko sovelluksessa ja yhdistääksesi useita komponentteja ilman, että paljastat toteutustietoja.
Composite
-komponentilla on vahva yhteys sen alla olevaan sidottuun komponenttiin. Tämä antaa sinulle kontrollin siitä, mitä menetelmiä ja ominaisuuksia käyttäjät voivat käyttää, toisin kuin perinteisessä perinnössä, jossa kaikki on näkyvissä.
Jos sinun tarvitsee integroida web-komponentteja muusta lähteestä, käytä erikoistuneita vaihtoehtoja:
- ElementComposite: Web-komponenteille, joilla on tyyppiturvallinen ominaisuuksien hallinta
- ElementCompositeContainer: Web-komponenteille, jotka hyväksyvät slottisisältöä
Käyttö
Määrittääksesi Composite
-komponentin, laajenna Composite
-luokkaa ja määritä sen hallitsema komponenttityyppi. Tämä muuttuu sidotuksi komponentiksesi, joka on juurisisältö, joka pitää sisäisen rakenteesi:
public class BasicComposite extends Composite<FlexLayout> {
public BasicComposite() {
// Pääsy sidottuun komponenttiin sen konfiguroimiseksi
getBoundComponent()
.setDirection(FlexDirection.COLUMN)
.setSpacing("3px")
.add(new TextField(), new Button("Lähetä"));
}
}
getBoundComponent()
-metodi tarjoaa pääsyn alaosaan, jolloin voit konfiguroida sen ominaisuuksia, lisätä lapsikomponentteja ja hallita sen käyttäytymistä suoraan.
Sidottu komponentti voi olla mikä tahansa webforJ-komponentti tai HTML-elementtikomponentti. Joustavien asettelujen osalta harkitse FlexLayout
tai Div
käyttämistä sidottuna komponenttina.
Älä koskaan laajenna Component
- tai DwcComponent
-luokkaa suoraan. Käytä aina koostumusmalleja Composite
-komponentin rakentamiseen.
Yli kirjoita initBoundComponent()
kun tarvitset enemmän joustavuutta sidotun komponentin luomisessa ja hallinnassa, kuten käyttämällä parametrisoituja konstruktoreita oletusarvoisen ilman argumenttia -konstruktorin sijasta. Käytä tätä mallia, kun sidottu komponentti vaatii komponentteja siirrettävän sen konstruktorille sen sijaan, että ne lisättäisiin jälkikäteen.
public class CustomFormLayout extends Composite<FlexLayout> {
private TextField nameField;
private TextField emailField;
private Button submitButton;
@Override
protected FlexLayout initBoundComponent() {
nameField = new TextField("Nimi");
emailField = new TextField("Sähköposti");
submitButton = new Button("Lähetä");
FlexLayout layout = new FlexLayout(nameField, emailField, submitButton);
layout.setDirection(FlexDirection.COLUMN);
layout.setSpacing("10px");
return layout;
}
}
Komponentin elinkaari
webforJ hallitsee kaikkia Composite
-komponenttien elinkaaren hallintaa automaattisesti. Käyttämällä getBoundComponent()
-metodia, suurin osa mukautetusta käyttäytymisestä voidaan hallita konstruktorissa, mukaan lukien lapsikomponenttien lisääminen, ominaisuuksien asettaminen, perusasetusten tekeminen ja tapahtumien rekisteröinti.
public class UserDashboard extends Composite<FlexLayout> {
private TextField searchField;
private Button searchButton;
private Div resultsContainer;
public UserDashboard() {
initializeComponents();
setupLayout();
configureEvents();
}
private void initializeComponents() {
searchField = new TextField("Etsi käyttäjiä...");
searchButton = new Button("Etsi");
resultsContainer = new Div();
}
private void setupLayout() {
FlexLayout searchRow = new FlexLayout(searchField, searchButton);
searchRow.setAlignment(FlexAlignment.CENTER);
searchRow.setSpacing("8px");
getBoundComponent()
.setDirection(FlexDirection.COLUMN)
.add(searchRow, resultsContainer);
}
private void configureEvents() {
searchButton.onClick(event -> performSearch());
}
private void performSearch() {
// Etsintälogiikka täällä
}
}
Jos sinulla on lisäkohtaisia asetuksia tai siivousvaatimuksia, sinun on ehkä käytettävä valinnaisia elinkaarin koukkuja onDidCreate()
ja onDidDestroy()
:
public class DataVisualizationPanel extends Composite<Div> {
private Interval refreshInterval;
@Override
protected void onDidCreate(Div container) {
// Alustaa komponentit, jotka vaativat DOM-liittämistä
refreshInterval = new Interval(5.0, event -> updateData());
refreshInterval.start();
}
@Override
protected void onDidDestroy() {
// Siivoaa resurssit
if (refreshInterval != null) {
refreshInterval.stop();
}
}
private void updateData() {
// Datan päivityslogiikka
}
}
Jos sinun täytyy suorittaa toimintoja sen jälkeen, kun komponentti on liitetty DOM:iin, käytä whenAttached()
-metodia:
public class InteractiveMap extends Composite<Div> {
public InteractiveMap() {
setupMapContainer();
whenAttached().thenAccept(component -> {
initializeMapLibrary();
loadMapData();
});
}
}
Esimerkki Composite
-komponentista
Seuraava esimerkki esittelee Todo-sovelluksen, jossa jokainen kohde on Composite
-komponentti, joka koostuu RadioButton
-komponentista, joka on muotoiltu kytkimeksi, ja Div:stä, jossa on teksti:
Näytä koodi
- Java
- CSS
Esimerkki: Komponenttien ryhmittely
Joskus saatat haluta käyttää Composite
-komponenttia ryhmittääksesi liittyviä komponentteja yhteen yksikköön, vaikka uudelleenkäytettävyys ei olisikaan ensisijainen huolenaihe:
Näytä koodi
- Java
- CSS