我正在玩 scala-js 并尝试使用MVP模式实现简单的主要细节。
最初我有一个ListView
有两个mutator:setEmpty(empty:Boolean)
和setItemAt(item:Item, row:Int)
但我想通过重载分配运算符来替换它们
trait ListView {
def empty:Boolean
def empty_=(empty: Boolean)
def item(row: Int):Item
// mutator for item at row
}
它适用于empty
,但对于item
,我希望有一个方法调用,如:
val view:ListView = ..
view.items(row) = item
我的第一个想法是从具有items(row)
方法的方法=
返回一个特殊类来更改视图。但是后来我无法在给定的行中获取该项,并且该类应该由视图的所有实现来实现。
Scala 样式可以更改特定行的项目吗?
答案 0 :(得分:4)
您可以使用具有object items
和apply
方法的内部update
来执行此操作:
trait ListView {
...
object items {
def apply(row: Int): Item = ???
def update(row: Int, item: Item): Unit = ???
}
}
现在你可以做到:
val listView: ListView = ???
val item = listView.items(0)
listView.items(0) = someItem