extjs 如何动态处理多个参数

goqiplq2  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(169)

如何动态处理多个参数。
我有多个这样的参数的路由。

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

我正在采取整个网址和制动这一点,然后在该工作
谁能告诉我我最好能做什么。

chhqkbe1

chhqkbe11#

ExtJS Router并不是真的用来传递变量参数的,比如URL查询字符串。ExtJS Router可以用来跟踪应用程序的状态,并将其存储在浏览器历史记录中,这样用户就可以向后和向前导航,并链接到应用程序的特定部分,就像它不是一个单页应用程序一样。
你为一个路由指定的方法将从路由中获取所有参数,按照这个顺序。所以路由home:/param1需要function(param1),路由home:/param1/:param2function(param1, param2)等等。这些不是键值对,比如?param1=1&param2=2。你可以像yourdomain.com#home/1/2那样使用它们,处理这个路由的函数将接收12作为参数。在该顺序中,您不能在路由中指定参数名称。
有一种可能性是动态地设置路由,而不是在类声明中,使用控制器的setRoute方法,并在你的应用程序初始化时执行它。但它不会真正帮助你,因为你仍然需要有1,2,3等参数的函数。
所以你有两个选择,据我所知:
1.只使用一个参数来表示路径,比如home/:myallparams,在function(myallparams)中,你可以尝试将它的各个部分分开,但是你很容易遇到特殊字符的麻烦,我并不推荐这种方法。
1.您可以在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
    }
}

相关问题