Идентификатор фрагмента URL - упрощает состояние, обрабатывающее (JavaScript)

У меня есть веб-приложение, которое делает широкое применение идентификатора фрагмента для обработки "состояния".

examplesite.com/#$mode=direct$aa;map=t;time=2003;vid=4;vid=7

Много вопросов:

1) Что такое хороший способ присвоить различное "location.hash пары значение-имя" к переменным для отслеживания состояние?

1a) я должен сделать объект, который отслеживает состояние в js, или объявите глобальные переменные для каждой пары значение-имя?

1b), там какие-либо хорошие плагины jQuery для упрощения этого?

1c), Если я хочу отслеживать что-то позвонившее "цвет" - должен он в любом случае быть добавленным к фрагменту (#) и что является корректным способом проверить, определяется ли это; может код ниже быть улучшенным?

var color;

var hashString = location.hash;
var nvPairs = hashString.split(";");
var nvPair = new Array();

for (i = 0; i < nvPairs.length; i++)
{
    var keyValuePair = nvPairs[i].split("=");
    nvPair[keyValuePair[0]] = keyValuePair[1];
}

if (nvPair['color']) color = nvPair['color'];       

1d), Поскольку некоторые имена используются дважды ("vid" в примере выше) - как я мог легко сохранить их, отдельные переменные?

2) Существует 4 различных "хеша", на которые я хочу обратить дополнительное внимание:

examplesite.com/ (никакой хеш)
examplesite.com/#example=5 (содержит "пример"),
examplesite.com/#time=2003;vid=4;vid=7;modified=5 (содержит "измененный"),
examplesite.com/#time=2003;vid=4;vid=7 (не содержит "измененный" или "пример"),

Как Вы записали бы управляющую структуру, которая извлекает переменные из хеша, когда загрузки приложения и проверяют вышеупомянутые условия?

3) Как предыдущий state/s может быть сохранен и как инициировать изменение состояния, когда кнопка "Назад" нажимается?

6
задан Josh Lee 11 March 2010 в 04:17
поделиться

2 ответа

Я бы просто использовал объект, содержащий массивы вместо массива. Код будет выглядеть что-то вроде:

var color; 

var keyValuePair,
    hashString = location.hash,
    nvPairs = hashString.split(";"),
    nvPair = {}; 

for (var i = 0; i < nvPairs.length; ++i){ 
    keyValuePair = nvPairs[i].split("="); 
    if (keyValuePair[0] in nvPair)
      nvPair[keyValuePair[0]].push(keyValuePair[1]);
    else
      nvPair[keyValuePair[0]] = [keyValuePair[1]];
} 

if ('color' in nvPair) color = nvPair['color'][0];
2
ответ дан 17 December 2019 в 18:16
поделиться

Я считаю, что барбекю из Бен Альмана может помочь вам: http://benalman.com/projects/jquery-bbq-plugin/

1
ответ дан 17 December 2019 в 18:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: