javascript - 如何以动态方式处理多个参数
问题描述
如何以动态方式处理多个参数。
我有这样的多个参数的路由。
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 */
}
我正在获取整个网址并制动它,然后继续努力
谁能解释我能做的最好的事情。
解决方案
ExtJS 路由器并不是真正用于传递可变数量的参数,例如 URL 查询字符串。ExtJS 路由器可用于跟踪应用程序的状态并将其存储在浏览器历史记录中,因此您的用户可以前后导航,并链接到应用程序的特定部分,就像它不是单页应用程序一样。
您为路由指定的方法将按顺序从路由中获取所有参数。所以 route home:/param1
needs function(param1)
, route home:/param1/:param2
afunction(param1, param2)
等。这些不是键值对,例如?param1=1¶m2=2
. 您可以使用它们 like yourdomain.com#home/1/2
,并且处理此路由的函数将接收1
和2
作为参数,按此顺序,您不能在路由中指定参数名称。
可以使用控制器的方法动态设置路由,而不是在类声明中setRoute
,并在初始化应用程序时执行它。但这不会真正帮助您,因为您仍然需要具有 1、2、3 等参数的函数。
因此,据我了解,您有两种选择:
- 只为您的路线使用一个参数,例如
home/:myallparams
,并且function(myallparams)
您可以尝试将其部分分开。但是你很容易遇到特殊字符的麻烦,我真的不推荐这种方法。 - 您可以在 ExtJS 应用程序中使用传统的 URL 查询字符串,并将路由器仅用于基本路由。假设
?param1=1¶m2=2
URL 中的通常格式为 ,您可以使用以下代码提取 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
}
}
推荐阅读
- thunderbird-addon - Thunderbird 68.4.1:如何检查邮件是否被标记为“垃圾邮件”?
- python - 在 Linux 上将 Spyder 与 Python 2.7 和 Python 3 一起使用
- sqlite - 查询以在整个表上搜索关键字
- r - 使用 lapply 将单个数据框列转换为数据框列表中的数字
- asynchronous - ZeroMQ异步http请求和消息的区别?
- elasticsearch - 不支持logstash script_lang [groovy]
- cmake - 无法使用 make 构建诺基亚 HEIF 库
- cytoscape - Cytoscape 安装
- python - 如何使用python将记录添加到MySQL中的表中?
- stata - 在特定观察后加载所有数据