JQuery Mobile и "параметры запроса" для навигации по hashbang

Я использую jQuery Mobile и имею несколько страниц на одной странице HTML. Открывая эти страницы, я хотел бы передать им параметры, чтобы их параметры были постоянными в URL.

например.

  <a href="#map?x=4&y=2"

Он откроется, и я смог бы получить доступ к параметрам X и Y в событии beforeshow.

Возможно ли это и как? Какие альтернативные способы вы предлагаете для кодирования параметров с помощью hashbangs?

Ответ 1

Да, у вас могут быть такие ссылки, как вы показали:

<a href="#map?x=4&y=2"> Click here </a>

Затем, перед показом, вы можете прочитать эти параметры с помощью этого кода:

var params = QueryStringToHash(location.hash.substr(1));
//Now you can use params.x, params.y, etc

Определение QueryStringToHash (полученное из здесь) следующее:

var QueryStringToHash = function QueryStringToHash  (query) {
  var query_string = {};
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    pair[0] = decodeURIComponent(pair[0]);
    pair[1] = decodeURIComponent(pair[1]);
        // If first entry with this name
    if (typeof query_string[pair[0]] === "undefined") {
      query_string[pair[0]] = pair[1];
        // If second entry with this name
    } else if (typeof query_string[pair[0]] === "string") {
      var arr = [ query_string[pair[0]], pair[1] ];
      query_string[pair[0]] = arr;
        // If third or later entry with this name
    } else {
      query_string[pair[0]].push(pair[1]);
    }
  } 
  return query_string;
};

Надеюсь, это поможет. Приветствия

Ответ 2

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

Я бы перехватил клики по всем ссылкам и искал конкретный элемент данных, скажем, data-params:

    $('a').live('click',
        function(e) {
            var data = $(e.target).jqmData()
            globalParams = data.params !== null ? data.params : null
        }
    )

И в вашем HTML вы можете пойти

<a href="#map" data-params="x=4&y=2">....</a>

В этом случае вы создаете глобальную переменную, называемую params, которую вы должны иметь доступ единообразно от всего вашего кода.

Вам придется самостоятельно проанализировать эти параметры, однако, что это не так сложно, можно использовать что-то вроде этого:

function getCurrentParams() {

    if (!params) {
        return null
    }

    var res = {}
    $(params.split('&')).each(
        function(i, e) {
            var pair = e.split('=')
            if (pair.length !== 2) {
                return
            }
            res[pair[0]] = pair[1]
        }
    )

    return res
}