如何动态处理多参数
我有像这样的多个参数路由。
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¶m2=2
那样是键值对。您可以像使用yourdomain.com#home/1/2
一样使用它们,处理此路由的函数将接收1
和2
作为参数,按照这个顺序,您不能在路由中指定参数名称。
可以动态地设置路由,而不是在类声明中,使用控制器的setRoute
方法,并在初始化应用程序时执行它。但这并不能真正帮助你,因为你仍然需要带有1、2、3等参数的函数。
所以你有两个选择,据我所知:
- 为您的路由只使用一个参数,如
home/:myallparams
,在function(myallparams)
中,您可以尝试将其部分分开。但是你很容易遇到特殊字符的麻烦,我真的不推荐这种方法。 - 你可以在ExtJS应用中使用传统的URL查询字符串,只对基本路由使用Router。假设URL中通常的
?param1=1¶m2=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
}
}