如何动态处理多个参数。
我有多个这样的参数的路由。
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 */
}
我正在采取整个网址和制动这一点,然后在该工作
谁能告诉我我最好能做什么。
1条答案
按热度按时间chhqkbe11#
ExtJS Router并不是真的用来传递变量参数的,比如URL查询字符串。ExtJS Router可以用来跟踪应用程序的状态,并将其存储在浏览器历史记录中,这样用户就可以向后和向前导航,并链接到应用程序的特定部分,就像它不是一个单页应用程序一样。
你为一个路由指定的方法将从路由中获取所有参数,按照这个顺序。所以路由
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等参数的函数。所以你有两个选择,据我所知:
1.只使用一个参数来表示路径,比如
home/:myallparams
,在function(myallparams)
中,你可以尝试将它的各个部分分开,但是你很容易遇到特殊字符的麻烦,我并不推荐这种方法。1.您可以在ExtJS应用程序中使用传统的URL查询字符串,并仅对基本路由使用Router。假设URL中的常用格式为
?param1=1¶m2=2
,您可以使用以下代码来提取ExtJS代码中的参数: