jQuery Mobile и «параметры запроса» для навигации по hashbang - PullRequest
11 голосов
/ 08 июля 2011

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

например.

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

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

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

Ответы [ 3 ]

7 голосов
/ 11 июля 2011

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

Я бы перехватывал клики по всем ссылкам и искал определенный элемент данных, скажем, данные-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
}
4 голосов
/ 09 июля 2011

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

<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;
};

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

0 голосов
/ 18 февраля 2013

Проверяли ли вы FAQ по мобильному jQuery?-> http://jquerymobile.com/test/docs/faq/pass-query-params-to-page.php

Я сейчас использую: https://github.com/azicchetti/jquerymobile-router

...