如何动态处理多参数



如何动态处理多参数

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

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 */
}

我正在取整个url,然后处理这个,然后处理那个

谁能告诉我我该怎么做?

ExtJS路由器并不真正意味着传递可变数量的参数,像URL查询字符串。ExtJS路由器可以用来跟踪你的应用程序的状态,并将其存储在浏览器历史记录中,这样你的用户就可以来回导航,并链接到你的应用程序的特定部分,就像它不是一个单页应用程序一样。

你为路由指定的方法将按照这个顺序从路由中获取所有参数。所以路线home:/param1需要function(param1),路线home:/param1/:param2需要function(param1, param2)等等。它们不像?param1=1&param2=2那样是键值对。您可以像使用yourdomain.com#home/1/2一样使用它们,处理此路由的函数将接收12作为参数,按照这个顺序,您不能在路由中指定参数名称。

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

所以你有两个选择,据我所知:

  1. 为您的路由只使用一个参数,如home/:myallparams,在function(myallparams)中,您可以尝试将其部分分开。但是你很容易遇到特殊字符的麻烦,我真的不推荐这种方法。
  2. 你可以在ExtJS应用中使用传统的URL查询字符串,只对基本路由使用Router。假设URL中通常的?param1=1&param2=2格式,您可以使用以下代码提取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
}
}

最新更新