#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 и т.д. параметрами.
Так что у вас есть два варианта, насколько я понимаю:
- Используйте только один параметр для вашего маршрута, например
home/:myallparams
, и вfunction(myallparams)
нем вы можете попытаться разделить его части. Но вы можете легко попасть в неприятности со специальными символами, и я действительно не рекомендую этот подход. - Вы можете использовать традиционную строку запроса 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
}
}