代码之家  ›  专栏  ›  技术社区  ›  Oleg

scalajs反应路由器。如何在条件路由内执行Ajax请求

  •  0
  • Oleg  · 技术社区  · 8 年前

    我正在尝试制定一些有条件的路线。该条件在服务器端解决。

    路由规则示例:

    | (dynamicRouteCT("#user" / long.caseClass[User]) ~> dynRender((page: User) => <.div("Hello, " + page.id.toString)))
      .addCondition((page: User) => checkPermissions(page.id))(_ => Some(redirectToPage(Page403)(Redirect.Push)))
    

    checkpermissions 正文:

      def checkPermissions(id: Long) = CallbackTo.future{
        /*Ajax.get(s"http://some.uri/?id=$id") map (res =>
         * if (something) true
         * else false
         * )
         */
    
        //the request before returns Future[XMLHttprequest] witch maps to Future[Boolean]
        Future(false)
      }
    

    我这里的类型不匹配: (page: User) => checkPermissions(page.id)

    是否可以在条件路由内执行Ajax请求?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Golly    8 年前

    def addCondition(cond: Page => CallbackTo[Boolean])(condUnmet: Page => Option[Action[Page]]): Rule[Page] CallbackTo[Boolean] Future[A] A this table in the doc CallbackTo[Future[Boolean]]

    Future

    1. AsyncState[E, A] Empty AwaitingResponse Loaded(value: A) Failed(error: E)
      Loaded Failed
    2. AsyncState[Boolean]

    3. Callback

    Boolean AsyncState[UserAccess]

    推荐文章