AlpineJs permet de créer/gérer des composants falicement avec Javascript sans se lancer dans une SPA, très léger (<10ko gzippé et minifié) et n'utilise pas de DOM virtuel. Sa syntaxe est similaire à VueJS. C'est un bon outil pour remplacer jQuery et moins complexe que VueJs / React / Angular.
Présentation des principes d'AlpineJs : https://codewithhugo.com/alpine-tips/
x-component est modifiable. Voir la PR/MR https://github.com/markmead/alpinejs-component/pull/28Alpine.js Limitations:
Juris.js Advantages:
Version simple ; utilise directement l'event $event.target.selectedOptions :
<div class="mb-3"> <label for="rirSelect" class="form-label">Select RIR(s):</label> <select id="rirSelect" class="form-select" multiple @change="filterRirs($event.target.selectedOptions)"> <template x-for="rir in guiData.rirs" :key="rir.key"> <option x-bind:value="rir.key" x-text="rir.attributes.label"></option> </template> </select> </div>
Version avec bouton pour supprimer la sélection et désactiver ce bouton quand aucune sélection ; utilise un x-data :
<div class="mb-3" x-data="{selectedOptions:[]}"> <label for="rirSelect" class="form-label">Select RIR(s):</label> <button class="btn btn-outline-primary btn-sm" x-bind:disabled="selectedOptions.length==0" @click="selectedOptions=[];filterRirs()" >All</button> <select id="rirSelect" class="form-select" multiple x-model="selectedOptions" @change="filterRirs(selectedOptions)" > <template x-for="rir in guiData.rirs" :key="rir.key"> <option x-bind:value="rir.key" x-text="rir.attributes.label"></option> </template> </select> </div>