我尝试从 NewList 中删除项目,但没有方法可以做到这一点。直接访问列表项是否安全?为什么没有removeItem:方法?
| 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
最佳答案
您不应该删除:
来自m listItems
的项目,如上面倒数第二条语句所示。请再次发送 m items:
消息。对于此消息的参数,让您的模型对象提供不再包含您要删除的元素的项目集合。
当然,如果这些元素保存在 Array
中,您将无法从中删除
任何内容,并且需要提供一个新的Array
作为原始的副本,没有删除的元素。但是,如果您的模型将元素保留在 OrderedCollection
中,则只需从中删除该元素即可。
换句话说,您需要一个实际模型对象来负责了解哪些元素属于集合,以及反射(reflect)这种情况的 NewModelList
实例,而不是 NewModelList
通过删除或添加元素来保存和维护这样的集合,因为这是您的实际模型对象的工作。两个对象将指向完全相同的集合,但具有不同的职责。
关于smalltalk - 如何从 Pharo 5 的 NewList 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249591/