Как обрабатывать несколько параметров динамическим способом

#javascript #extjs #routes #extjs6 #extjs6.5

Вопрос:

Как обрабатывать несколько параметров динамическим способом.

У меня есть маршрутизация с несколькими такими параметрами.

 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-адрес и торможу это, а затем работаю над этим

кто-нибудь может объяснить мне, что я могу сделать лучше всего.

Ответ №1:

Маршрутизатор ExtJS на самом деле не предназначен для передачи переменного числа параметров, таких как строка запроса URL. Маршрутизатор ExtJS можно использовать для отслеживания состояния вашего приложения и сохранения его в истории браузера, чтобы ваши пользователи могли перемещаться вперед и назад и ссылаться на определенные части вашего приложения, как будто это не приложение с одной страницей.

Метод, указанный вами для маршрута, получит все параметры из маршрута в указанном порядке. Итак home:/param1 , потребности маршрута function(param1) , маршрут home:/param1/:param2 а function(param1, param2) и т. Д. Это не пары «ключ-значение», например ?param1=1amp;param2=2 . Вы можете использовать их как yourdomain.com#home/1/2 , и функция, обрабатывающая этот маршрут, получит 1 и 2 в качестве параметров, в таком порядке вы не можете указывать имена параметров в маршруте.

Существует возможность задавать маршруты динамически, не в объявлении класса, используя setRoute метод контроллера, и выполнять его при инициализации вашего приложения. Но это вам не очень поможет, потому что вам все равно понадобятся функции с 1,2,3 и т.д. параметрами.

Так что у вас есть два варианта, насколько я понимаю:

  1. Используйте только один параметр для вашего маршрута, например home/:myallparams , и в function(myallparams) нем вы можете попытаться разделить его части. Но вы можете легко попасть в неприятности со специальными символами, и я действительно не рекомендую этот подход.
  2. Вы можете использовать традиционную строку запроса URL-адреса в своем приложении ExtJS и использовать маршрутизатор только для основных маршрутов. Предполагая обычный формат ?param1=1amp;param2=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
    }
}