0

如何以动态方式处理多个参数。

我有这样的多个参数的路由。

routes: {
        'home/:id': 'onHomeId',
        'home/:id/:param1': 'onHomeId',
        'home/:id/:param1/:param1Value': 'onHomeId',
        'home/:id/:param1/:param1Value/:param2/:param2Value': 'onHomeId',
        'home/:id/:param1/:param1Value/:param2/:param2Value/:param3/:param3Value': 'onHomeId',
        'home/:id/:param1/:param1Value/:param2/:param2Value/:param3/:param3Value/:param4/:param4Value': 'onHomeId',
        
    }

我不想写这么多,而是想要一些动态的方式来生成,因为参数可以增长。

所以这就是我正在尝试的。

onHomeId : function(){
    let _this = this,
        hashValue = location.hash,
        params =  location.hash.split("/");
        
    /* code where i am using params */
}

我正在获取整个网址并制动它,然后继续努力

谁能解释我能做的最好的事情。

4

1 回答 1

0

ExtJS 路由器并不是真正用于传递可变数量的参数,例如 URL 查询字符串。ExtJS 路由器可用于跟踪应用程序的状态并将其存储在浏览器历史记录中,因此您的用户可以前后导航,并链接到应用程序的特定部分,就像它不是单页应用程序一样。

您为路由指定的方法将按顺序从路由中获取所有参数。所以 route home:/param1needs function(param1), route home:/param1/:param2afunction(param1, param2)等。这些不是键值对,例如?param1=1&param2=2. 您可以使用它们 like yourdomain.com#home/1/2,并且处理此路由的函数将接收12作为参数,按此顺序,您不能在路由中指定参数名称。

可以使用控制器的方法动态设置路由,而不是在类声明中setRoute,并在初始化应用程序时执行它。但这不会真正帮助您,因为您仍然需要具有 1、2、3 等参数的函数。

因此,据我了解,您有两种选择:

  1. 只为您的路线使用一个参数,例如home/:myallparams,并且function(myallparams)您可以尝试将其部分分开。但是你很容易遇到特殊字符的麻烦,我真的不推荐这种方法。
  2. 您可以在 ExtJS 应用程序中使用传统的 URL 查询字符串,并将路由器仅用于基本路由。假设?param1=1&param2=2URL 中的通常格式为 ,您可以使用以下代码提取 ExtJS 代码中的参数:
var queryString = window.location.href.split('?')[1];
if (queryString) {
    var queryObject = Ext.Object.fromQueryString(queryString);

    // check for specific parameters
    if (queryObject.param1) {
        // do something with queryObject.param1
    }
    if (queryObject.param2) {
        // do something with queryObject.param2
    }
}
于 2021-08-10T19:44:02.877 回答