2016-10-25 1 views
2

J'ai essayé de supprimer un élément d'une liste NewList mais il n'y a pas de méthode pour cela. Il est sûr d'accéder directement aux éléments de la liste? Pourquoi il n'y a pas de méthode removeItem:?Comment supprimer un élément de NewList dans Pharo 5

| m | 
m := NewListModel new. 
m items: (1 to: 50) asOrderedCollection. 
m headerTitle: 'Fubu'. 
m setSelectedIndex: 2. 
m listItems remove: 3. 
m openWithSpec. 

Les travaux ci-dessus, mais si je domaine des objets, il échouera avec le message:

ShouldNotImplement: #remove:ifAbsent: should not have been implemented in Array 

Répondre

2

Vous ne devriez pas remove: un élément de m listItems comme indiqué dans votre dernière déclaration à côté ci-dessus. Envoyez à nouveau le message m items: à la place. Pour l'argument de ce message, laissez votre objet de modèle fournir la collection d'éléments qui ne contient plus l'élément que vous voulez supprimer.

Bien sûr, si ces éléments sont maintenus dans un Array vous ne serez pas en mesure de remove: quoi que ce soit de lui, et devra fournir une nouvelle Array comme une copie de l'original sans l'élément enlevé. Cependant, si votre modèle conserve les éléments dans un OrderedCollection, il suffirait de supprimer l'élément.

En d'autres termes, vous avez besoin d'un objet modèle réel en charge de savoir quels éléments appartiennent à la collection et l'instance NewModelList reflète cette situation plutôt que la tenue NewModelList et le maintien d'une telle collection en supprimant ou en ajoutant des éléments à elle parce que c'est le travail de votre objet de modèle réel. Les deux objets pointeront vers la même collection mais avec des responsabilités différentes.