Titanium : Inclure plusieurs fois la même collection

Publié le 02 août 2016
#titanium# mobile

Avez-vous déjà eu besoin d'utiliser plusieurs fois la même collection dans votre vue afin de réaliser différents traitements sur celle-ci ? Voici le moyen de réaliser cette opération.

Exemple type

Vous disposez de la collection "user" et vous voulez afficher une liste d'utilisateurs hommes et une liste d'utilisateurs femmes dans la même vue.

user.xml

<Alloy>
	<Collection src="user" instance="true" id="userMan" />
	<Collection src="user" instance="true" id="userWoman" />
	<View id="man" layout="horizontal" dataCollection="$.userMan"  dataFilter="filterMan">
		<Label text="{name}"/>
	</View>
	<View id="man" layout="horizontal" dataCollection="$.userWoman"  dataFilter="filterWoman">
		<Label text="{name}"/>
	</View>
</Alloy>

NOTE : J'utilise ici Alloy

user.js

//fetch data to view
$.userMan.fetch();
$.userWoman.fetch();

function filterMan(collection) {
	return collection.where({
	    type: 'Man'
	});
}
function filterWoman(collection) {
	return collection.where({
	    type: 'Woman'
	});
}

Comment cela marche-t-il ?

Décortiquons l'élément <Collection />.

C'est l'attribut instance="true" qui réalise toute la magie. En passant à true cet attribut nous créons une instance de notre collection user. Et en créant différentes instances de la même collection, nous pouvons les manipuler chacune indépendamment de l'autre grâce à l'attribut id.

Ainsi dans la vue ou le contrôleur il suffit de référencer la collection souhaitée avec $. suivit de son id. $.userMan par exemple.

À propos de l'auteur - gkueny @Occitech

Développeur depuis maintenant 2 ans et demi, j'ai une grande affinité avec le front-end et les tests bien fait. Pas full-stack mais touche à tout, je suis également à l'aise sur du Symfony / php.