Массив (json) не передается в параметры редактирования параметров jqGrid - PullRequest
2 голосов
/ 12 мая 2011

Я пытался передать массив из глобальной переменной (codata) в массив параметров editoptions (jqGrid).Мой код выглядит следующим образом:

--------- country_list.php выдает следующий массив json -----------

["ABU","AD","AE","AF" .... "ZA","ZM","ZW"]

--------- PHP-скрипт с кодом jqGrid ----------

jQuery(document).ready(function(){

            var codata = new Array();

            $.getJSON('countries_list.php', function(list){
                $.each(list, function(val) {
                    codata.push("'"+val+"'");
                    # --- Here alert() displays 'codata' with all the elements ---
                });
            });

            $("#datatable").jqGrid({
                 ......
                 // some code until colMode specs
                 ......
                 {   name:'guco',
                        index:'guco',
                        edittype:'select',
                        width:90,
                        editable: true,
                        editoptions: {
                            formatter:'select',
                            value: codata # --- array is not passed, it comes empty ---
                        },
                        sortable: true,
                        resizable: false
                    },
        .....

--------- PHP-скрипт с кодом jqGrid ----------

Любой намек, как это исправить? Спасибо заранее.

Марио Бенитес .-

Ответы [ 4 ]

2 голосов
/ 13 мая 2011

Большое спасибо всем вам, ребята, я многому научился благодаря вашему вкладу. Проблема была исправлена ​​следующим образом:

(читая о) Я обнаружил, что getjson работает в «асинхронном режиме» (я новичок в jQuery), и код для решения проблемы:

    jQuery(document).ready(function(){

        var codata = (function () {
            var list = null;

            $.ajax({
                'async': false,
                'global': false,
                'url': 'countries_list.php',
                'dataType': 'json',
                'success': function (data) {
                    list = data;
                }
            });

            return list;
        })();

        $("#datatable").jqGrid({
             ... jqGrid settings ...
            colModel: [
                ....
                {   name:'guco',
                    index:'guco',
                    edittype:'select',
                    width:90,
                    editable: true,
                    editoptions: {
                        value: codata
                    },
                    sortable: true,
                    resizable: false
                },
                ....

Большое спасибо еще раз, я надеюсь, что это поможет кому-то еще.

Марио Бенитес.

0 голосов
/ 19 июля 2011

Я пробовал оба пути и помог ответ, данный в ссылках Olegs.Использование параметра buildSelect позволяет полностью контролировать значение.Когда я использовал метод value, он назначал простые целочисленные значения от 0 до n.Вы также можете назначить свои собственные классы CSS в этой парадигме.+1 для buildSelect / dataurl.

0 голосов
/ 12 мая 2011

Я бы порекомендовал вам использовать dataUrl вместе с buildSelect вместо value из editoptions.Вы можете найти соответствующий пример кода buildSelect в части «ОБНОВЛЕНО» ответа .

0 голосов
/ 12 мая 2011

Из того, что я вижу, ваш php-скрипт передает действительный массив js, а не объект json. Самое логичное, что нужно сделать, это вызвать jqGrid внутри функции обратного вызова ajax, назначив $("#datatable").jqGrid({ ... editoptions: { value: list } ... });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...