ExtJS7:查询参数不匹配的路由

问题描述 投票:0回答:2

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

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

我也尝试过以下代码

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

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

unmatchedroute
操作

javascript extjs extjs6 sencha-cmd extjs7
2个回答
1
投票

您无法将路由与查询参数相匹配。路由器根据

window.location.hash
进行匹配 - URL 中
#
之后的部分。查询参数是
window.location.querystring
的一部分;没有重叠。

可以参数化路线 - 但不能使用查询参数。


0
投票

我知道我迟到了三年,但是可以使用“?”作为 extjs 路由器的“params”标识符,因此您可以让路由器匹配 #action/123 和 #action/123?a=b,您只需要适合您的条件的正则表达式。我使用类似的东西:

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

用“?”将输入包装在非捕获组中末尾的量词允许导航到#action,无需后续查询。您还需要转义反斜杠和“?”在内部非捕获组中为“\?”所以正则表达式被正确解析为“?”。

我发现的唯一可能奇怪的交互是,如果路由器只收到“#my-view?”如果没有后续查询字符串,则 onAction 方法将传递“?”对于“params”,但这很容易解释。

© www.soinside.com 2019 - 2024. All rights reserved.