JqGrid - объединение javascript & JSON-модели модели столбцов сетки - PullRequest
1 голос
/ 10 ноября 2011

Можно ли объединить файл JavaScript модели столбца и ответ JSON необработанных данных в 1 файл?

Олег - вот, пожалуйста:

JSON - codes.json

{
    "codes":[
        {
            "code" : "WFH - Work From Home"
        },  
        {
            "code" : "OST - Onsite"
        }
]}

dataUrl и buildSelect - это создание пустого поля выбора

    editoptions: {
        dataUrl: 'http://localhost/json/codes.json',
        type: "GET",
        dataType: "json",
        contentType: "application/x-javascript; charset=utf-8",
        async: "true",
        buildSelect: function(response){
            var s = '<select>';
            $.each(response.codes, function(index, codes){
                s.append("<option>"+codes.code+"</option>");
            });
            return s + '</select>';
        }
    }},

1 Ответ

1 голос
/ 11 ноября 2011

Вы должны изменить код buildSelect примерно следующим образом

buildSelect: function (data) {
    var s = '<select>', codes, i, l, code, prop;
    if (data && data.codes) {
        codes = data.codes;
        for (i = 0, l = codes.length; i < l; i++) {
            code = codes[i];
            // enumerate properties of code object
            for (prop in code) {
                if (code.hasOwnProperty(prop)) {
                    s += '<option value="' + prop + '">' + code[prop] + '</option>';
                    break; // we need only the first property
                }
            }
        }
    }
    return s + "</select>";
}

Кроме того, вы должны использовать ajaxSelectOptions для установки любых параметров соответствующего $.ajax запроса, который вы отправляете jqGrid, если он получает данные с сервера. В любом случае вы должны использовать относительные URL-адреса, такие как json/codes.json или /json/codes.json вместо http://localhost/json/codes.json.

Примером параметра ajaxSelectOptions может быть следующий

ajaxSelectOptions: {
    dataType: 'json',
    cache: false
}

Если действительно требуется contentType: "application/x-javascript; charset=utf-8", вы можете добавить его как дополнительное свойство ajaxSelectOptions.

Как вы можете видеть из демонстрационной версии , выбор будет произведен правильно из ваших данных JSON с помощью указанной выше функции buildSelect. Выбор выглядит как

<select role="select" id="2_code" name="code">
    <option value="code1" role="option">WFH - Work From Home</option>
    <option value="code2" role="option">OST - Onsite</option>
</select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...