【问题标题】:ExtJS7: Routes with query parameters not matchingExtJS7:查询参数不匹配的路由
【发布时间】:2020-10-07 09:51:59
【问题描述】:

我已经实现了路由来匹配 ExtJS7 中的查询参数与以下路由代码

        ':node:params': {
          before: 'isLoggedIn',
          action: 'onAction',
          conditions: {
            ':params': '(^\\?[%a-zA-Z0-9\\-\\_\\s,&=]+)'
          }
        }

我也试过下面的代码

        ':node?:params': {
          before: 'isLoggedIn',
          action: 'onAction'
        }

在这两种情况下,带有查询参数的路由都不会与上述路由匹配,而是调用unmatchedroute 操作

【问题讨论】:

  • 您的网址是什么样的?它有一个正确的哈希?
  • 是的。它确实包含一个哈希,即 #catalog?a=b

标签: javascript extjs extjs6 sencha-cmd extjs7


【解决方案1】:

您无法将路由匹配到查询参数。路由器根据window.location.hash 进行匹配——# 之后的 URL 部分。查询参数是window.location.querystring 的一部分;没有重叠。

可以 parameterise routes - 但不能使用查询参数。

【讨论】:

  • 这意味着action/:id 应该匹配#action/123#action/123?a=b。但实际上 ExtJs 对两者的处理方式不同。它只正确匹配#action/123 并为#action/123?a=b 提升unmatchedroute
  • URL 的正文是 :///?#。所以对于一个普通的 URL,查询参数是 `?a=b#action/123.
  • 对于Router,部分路由必须用/隔开。所以action/:node/:params 可以匹配#action/123/a=bnode 是 123,params 是 a=b。但你不能轻易使用?作为分隔符。
  • 如果您使用该表格,则只需匹配action/:node_and_params,然后将node_and_params 拆分为?在您的路线处理程序中。
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 2013-11-26
  • 2015-11-07
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
相关资源
最近更新 更多