Как я могу заполнить данные в extjs компонент с помощью строки запроса? - PullRequest
0 голосов
/ 03 февраля 2010

Например, если у меня есть extjs ComboBox, и у меня есть URL-адрес типа http://localhost:8080?param=value1,value2,value3

Как я могу получить доступ к этому << param >> value в ExtJS, чтобы я мог преобразовать его в нечто вроде Ext.data.Array или ....

Ответы [ 3 ]

5 голосов
/ 07 февраля 2010

Используйте структуру для декодирования строки запроса:

var params = Ext.urlDecode(location.search.substring(1));
var array = [];
for (var name in params) {
    array.push([name, params[name]]);
}

Теперь array подходит для использования в качестве data для ArrayStore с полями name и value.

2 голосов
/ 07 мая 2010

У меня есть это (на основе кода @Lloyd, найденного выше):

var the_query_string = new Object();
(function() {
 var qs = location.search.substr(1).replace(/\+/g, ' ').split('&');
 for (var i = 0; i < qs.length; i++) {
  qs[i] = qs[i].split('=');
  if (qs[i][0])
   the_query_string[qs[i][0]] = decodeURIComponent(qs[i][1]);
 }
})();

, поэтому я могу получить доступ к любой переменной строки запроса глобально. например когда
location.search = '?search=hello+world&foo=bar%3Dbar'
то
the_query_string.search = 'hello world' и
the_query_string.foo = 'bar=bar'

1 голос
/ 03 февраля 2010

Я использую файл JavaScript, который я недавно обнаружил:

/* Client-side access to querystring name=value pairs
    Version 1.2.3
    22 Jun 2005
    Adam Vandenberg
*/

function QueryString(qs) { // optionally pass a querystring to parse
    this.params = new Object()
    this.get = QueryString_get

    if (qs == null)
        qs=location.search.substring(1,location.search.length)

    if (qs.length == 0) return

// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
    qs = qs.replace(/\+/g, ' ')
    var args = qs.split('&') // parse out name/value pairs separated via &

// split out each name=value pair
    for (var i = 0, len = args.length; i < len; i++) {
        var value;
        var pair = args[i].split('=')
        var name = unescape(pair[0])

        if (pair.length == 2)
            value = unescape(pair[1])
        else
            value = name

        this.params[name] = value
    }
}

function QueryString_get(key, default_) {
    // This silly looking line changes UNDEFINED to NULL
    if (default_ == null) default_ = null;

    var value=this.params[key]
    if (value==null) value=default_;

    return value
}

Что вы тогда сделаете:

var param = new QueryString().get("param");
var values = param.split(",");

значения будут вашим массивом.

...