2016-10-25 13 views
2

NewListからアイテムを削除しようとしましたが、これには方法がありません。リスト項目に直接アクセスすることは安全ですか?なぜremoveItem:メソッドがないのですか?PharoのNewListからアイテムを削除する方法

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

上記の作品が、私は、ドメインが、それはメッセージで失敗しますオブジェクトを持っている場合:

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

答えて

2

あなたは上記の最後の文にあなたの次のようにm listItemsから項目remove:べきではありません。代わりにm items:メッセージを送信してください。このメッセージの引数のために、あなたのモデルオブジェクトは削除したい要素をもはや含まないアイテムのコレクションを提供します。これらの要素はArrayで開催されている場合

もちろん、あなたはそれからremove:何もすることができなくなり、および削除要素なしでオリジナルのコピーとして新しいArrayを提供する必要があります。しかし、モデルが要素をOrderedCollectionに保持している場合は、その要素を削除するだけです。すなわち

は、要素がコレクションとNewModelListインスタンスこのような状況ではなくNewModelList保持を反映し、それに要素を削除または追加することによって、そのようなコレクションを維持するのに属する知る担当実際モデルオブジェクトが必要それはあなたの実際のモデルオブジェクトの仕事だからです。どちらのオブジェクトも同じコレクションを指しますが、異なる責任を持ちます。

関連する問題