У меня есть веб-приложение, которое делает широкое применение идентификатора фрагмента для обработки "состояния".
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 может быть сохранен и как инициировать изменение состояния, когда кнопка "Назад" нажимается?
Я бы просто использовал объект, содержащий массивы вместо массива. Код будет выглядеть что-то вроде:
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];
Я считаю, что барбекю из Бен Альмана может помочь вам: http://benalman.com/projects/jquery-bbq-plugin/