6
Mar

Dernier élément d’une collection Meteor

Alors j’ai essayé d’utiliser ‘bootstrapDualListbox’ dans mon projet.
Pour cela il fallait que j’exécute la fonction d’accroche une fois la liste chargée. J’ai découvert que Blaze, le templater de meteor permettait de récupérer l’index, le premier et le dernier élément d’un each. Mais en fait ils l’avaient déjà enlevé au moment ou je voulais l’utiliser…

Comment solutionner cette histoire?

Bon la technique pour imiter ça:
C’est de mettre au chargement de la liste un marqueur ‘lastItem’ sur le dernier éléments de la liste et de déplacer les ‘item’ dans un template différents. Lorsqu’on pop le dernier éléments onRendered lors de la boucle, on exécute la fonction désirée.

Dans mon « elements.js »

Template.elementsList.helpers({
	elements: function(){
		var elements = Elements.find().fetch();
		elements [elements .length - 1].lastItem = true;
		return elements;
	}
});

Template.elementsItem.onRendered(function(){
	if(this.data.lastItem){
		$('.duallistbox').bootstrapDualListbox({
			selectedListLabel: 'selected',
			preserveSelectionOnMove: 'moved',
			moveOnSelect: false,
		});
  	}
});

Dans mon « elements.html »

<template name="elementsList">
	<select multiple name="elements" class="form-control duallistbox">
		{{#each elements}}
			{{>elementsItem}}
		{{/each}}
	</select>
</template>

<template name="elementsItem">
	<option value="{{_id}}" >{{title}}</option>
</template>

Bon même si c’est un peu tricky, ça dépanne plutôt pas mal.

Aucun commentaire

Leave a Comment

Your email address will not be published. Required fields are marked *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Contactez-nous

Formulaire de contact

    Votre nom (obligatoire)

    Votre email (obligatoire)

    Votre téléphone (obligatoire)

    Sujet

    Votre message