为什么没有重新评估 Binding.scala 路由器?



我正在尝试通过Binding.scala为个人项目构建一个通用路由器。

我定义了一个PageState特征

sealed trait WhistState {
def text: String
def hash: String
def render: Binding[Node]
}

每种路径类型都有多个子类。然后,我尝试创建一个路由器,该路由器根据哈希选择正确的类。

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()
}

然后我是我的应用程序类,我试图使用它

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 ...表达式。

知道为什么这不起作用吗?

此致敬意

仅当unapply返回Some(newState)并且newState不等于前一个状态时,才会更改route.state

在您的情况下,unapply总是返回Some(defaultState)None。这就是为什么route.state永远不会改变。

相关内容

  • 没有找到相关文章

最新更新