Table des matières

Alpine.js

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/

Comparaison avec Juris JS

Alpine.js Limitations:

Juris.js Advantages:

Tips

Select multiple

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>