Windows Metro – Les composants WinJS : DatePicker, TimePicker, Rating, Tooltip, ToggleSwitch

Dans l’article précédent, on a vu le rendu que les composants HTML5 « classiques » pouvaient avoir:

Windows Metro – Le rendu des composants HTML par défaut

Les applications Windows 8 Metro utilisent le framework WinJS qui vient notamment avec d’autres composants, ne faisant pas partie de la spécification HTML5. Ces composants sont un peu spéciaux car il vont venir se greffer sur une balise HTML standard comme un div. Ils n’ont pas de balise consacrée comme <progress> par exemple.

On a déjà vu dans l’exemple de la liste, que leur implémentation se fait par un « winControl » assigné à l’élément HTML, qui va venir apporter le comportement spécifique du composant.

WinJS a préparé 5 composants graphiques pour vos IHM : DatePicker, TimePicker, Rating, Tooltip, ToggleSwitch. Voici un aperçu de leur rendu avec le style « ui-light »:

Les différentes manières d’instancier un composant WinJS

Un composant WinJS peut être créé grâce à des balises / attributs (markup) HTML ou en JavaScript ou un mix des deux.

Composant et ses options déclarés dans le markup HTML

<div id="rating1" 
 data-win-control="WinJS.UI.Rating" 
 data-win-options="{averageRating: 3.4, userRating: 4, onchange: changeRating}">
</div>

Ensuite, pour instancier réellement le composant et sa propriété « winControl », on va le faire passer dans la méthode process() de WinJS.UI:

WinJS.UI.process(document.getElementById("rating1"));

ou alors, on pourrait faire appel à processAll qui va parcourir tout le DOM de la page et aller instancier les composants WinJS

Composant déclaré en HTML et options en JavaScript

Il peut aussi être intéressant de laisser le composant comme un « placeholder », que l’on va paramétrer par la suite. Par exemple, vous allez placer votre composant Rating dans le markup HTML comme ceci:

<div id="rating1" data-win-control="WinJS.UI.Rating">
</div>

Mais la valeur du Rating n’est renvoyée qu’après un appel XHR à votre serveur par exemple. Vous allez donc lui passer ses options en JavaScript, après le retour de votre callback XHR:

var element = document.getElementById("rating1"); 
WinJS.UI.process(element); 
element.winControl.averageRating = 3.4; 
element.winControl.userRating = 4; 
element.winControl.onchange = changeRating;

Vous pouvez aussi utiliser la méthode setOptions qui permet de passer plusieurs options à la fois, comme ce que l’on avait dans le markup HTML. Plus concis mais plus difficile à debugger parfois:

var options = { averageRating: 3.4, userRating: 4, onchange: changeRating }; 
WinJS.UI.setOptions(element.winControl, options);

Composant créé complètement en JavaScript

Vous pouvez aussi tout faire en JavaScript, en appelant le constructeur de votre composant et en lui passant l’élément HTML à décorer:

<div id="rating1"></div>

Et dans le JS:

var newControl = new WinJS.UI.Rating(document.getElementById("rating1")); 
newControl.averageRating = 3.4; 
newControl.userRating = 4; 
newControl.onchange = changeRating;

Notez que si vous ne passez pas d’élément HTML, le composant WinJS va se charger d’en instancier un lui-même. L’élément créé automatiquement sera disponible à travers la variable « element » qu’il vous restera à ajouter au DOM:

var newControl = new WinJS.UI.Rating(null, { averageRating: 3.4, userRating: 4, onchange: changeRating }); 
newControl.element.id = "rating1"; 
document.body.appendChild(newControl.element);

Une réflexion au sujet de « Windows Metro – Les composants WinJS : DatePicker, TimePicker, Rating, Tooltip, ToggleSwitch »

  1. Ping : Windows Metro – Marker des fonctions comme « supportedForProcessing » pour pouvoir les utiliser dans le markup HTML (data-win-*) | HTML5 Tutorial

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *