2016-10-25 4 views
2

Ich habe versucht, ein Element aus einer NewList zu entfernen, aber es gibt keine Methode dafür. Es ist sicher, direkt auf die Listenelemente zuzugreifen? Warum gibt es keine removeItem: Methode?So entfernen Sie Artikel aus NewList in Pharo 5

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

Die oben genannten Arbeiten, aber wenn ich Domain-Objekte es mit der Meldung fehl:

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

Antwort

2

Sie sollen nicht remove: ein Element aus m listItems wie in Ihrem nächsten oben gezeigt letzte Anweisung. Senden Sie stattdessen die Nachricht m items: erneut. Lassen Sie für das Argument dieser Nachricht Ihr Modellobjekt eine Sammlung von Elementen bereitstellen, die das zu entfernende Element nicht mehr enthalten.

Natürlich, wenn diese Elemente in einem Array gehalten werden, werden Sie nicht in der Lage sein, remove: etwas von ihm, und wird eine neue Array als Kopie des Originals ohne das entfernte Element zur Verfügung stellen müssen. Wenn Ihr Modell jedoch die Elemente in einem OrderedCollection behält, würde es nur darum gehen, das Element daraus zu entfernen.

Mit anderen Worten, müssen Sie ein tatsächlichen Modellobjekt verantwortlich zu wissen, welche Elemente in der Sammlung gehören und die NewModelList Instanz reflektiert diese Situation eher als die NewModelList Halte und eine solche Sammlung Aufrechterhaltung durch Entfernen oder Hinzufügen von Elementen zu ihm denn das ist die Aufgabe Ihres tatsächlichen Modellobjekts. Beide Objekte verweisen auf die gleiche Sammlung, haben aber unterschiedliche Verantwortlichkeiten.