为什么不重新评估 Binding.scala 路由器?
Why is the Binding.scala router not reevaluated?
我正在尝试为 Binding.scala 的个人项目构建通用路由器。
我定义了一个 PageState
特征
sealed trait WhistState {
def text: String
def hash: String
def render: Binding[Node]
}
每个路线类型都有许多子classes。然后我尝试创建一个路由器,它基于哈希选择正确的 class.
object Router {
val defaultState: WhistState = DefaultState("Games")
val allStates: Vector[WhistState] = Vector(defaultState)
val route: Route.Hash[WhistState] = Route.Hash[WhistState](defaultState)(new Route.Format[WhistState] {
override def unapply(hashText: String): Option[WhistState] = allStates.find(_.hash == window.location.hash)
override def apply(state: WhistState): String = state.hash
})
route.watch()
}
然后我是我的应用程序 class我正在尝试使用这个
object Application {
import example.route.Router._
@dom
def render: Binding[Node] = {
for (hash <- route.state.bind.hash) yield println("hash: " + hash)
route.state.bind match {
case default: WhistState => println("default"); default.render.bind
case _ => println("none"); <div>NotFound</div>
}
}
def main(args: Array[String]): Unit = {
dom.render(document.querySelector("#content"), render)
}
}
我预计更改哈希会强制重新评估 route.state.bind match ...
表达式。
知道为什么这不起作用吗?
此致
route.state
仅在 unapply
returns a Some(newState)
和 newState
不等于以前的状态时发生变化。
在您的情况下,unapply
总是 returns Some(defaultState)
或 None
。这就是为什么 route.state
永远不会改变。
我正在尝试为 Binding.scala 的个人项目构建通用路由器。
我定义了一个 PageState
特征
sealed trait WhistState {
def text: String
def hash: String
def render: Binding[Node]
}
每个路线类型都有许多子classes。然后我尝试创建一个路由器,它基于哈希选择正确的 class.
object Router {
val defaultState: WhistState = DefaultState("Games")
val allStates: Vector[WhistState] = Vector(defaultState)
val route: Route.Hash[WhistState] = Route.Hash[WhistState](defaultState)(new Route.Format[WhistState] {
override def unapply(hashText: String): Option[WhistState] = allStates.find(_.hash == window.location.hash)
override def apply(state: WhistState): String = state.hash
})
route.watch()
}
然后我是我的应用程序 class我正在尝试使用这个
object Application {
import example.route.Router._
@dom
def render: Binding[Node] = {
for (hash <- route.state.bind.hash) yield println("hash: " + hash)
route.state.bind match {
case default: WhistState => println("default"); default.render.bind
case _ => println("none"); <div>NotFound</div>
}
}
def main(args: Array[String]): Unit = {
dom.render(document.querySelector("#content"), render)
}
}
我预计更改哈希会强制重新评估 route.state.bind match ...
表达式。
知道为什么这不起作用吗?
此致
route.state
仅在 unapply
returns a Some(newState)
和 newState
不等于以前的状态时发生变化。
在您的情况下,unapply
总是 returns Some(defaultState)
或 None
。这就是为什么 route.state
永远不会改变。