jqGrid динамический выбор полей - PullRequest
0 голосов
/ 06 августа 2010

есть ли способ динамического изменения значений поля состояния в colModel?Допустим, у нас есть модель Col с полем типа:

... field ... name: "state",type: "select",
editoptions: {value: "0:state0;1:state1;2:state2;3:state3;4:state4"}

Таким образом, я получаю поле выбора для моих состояний с этими значениями.Но мне нужно динамически решить, какие поля выбора должны быть возможны.Если текущая строка имеет статус state0, должны отображаться только state0 и state1.Если состояние - состояние1, отображение должно быть состоянием 0, состоянием 1 и состоянием 2 и т. Д. До состояния 4, в котором должны отображаться только состояния 3 и состояния 4.

Могу ли я решить эту проблему с помощью средства форматирования или есть какой-либо другой способчтобы сделать это.

Чтобы сделать это более сложным, скажем, что отображаемые состояния обычно зависят от пользователя, который вошел в систему, в моем приложении.В некотором смысле, пользователь может видеть только состояния 0, состояние 2 и состояние 4.Это может быть сделано еще более сложным, потому что переход между state3 и state4 не разрешен текущему пользователю.

Тем не менее и сами состояния динамичны.Было бы полезно динамически сгенерировать javascript для объекта в моем приложении, которое представляет общий класс состояний, и использовать этот объект для генерации необходимого мне вывода в формататоре?Поэтому я могу инкапсулировать логику в этом объекте, то, как генерируется мой вывод, и, кроме того, я получаю только состояния, которые пользователь может видеть.

Должен заставить меня убить двух зайцев одним выстрелом.

После перечитывания я надеюсь, что ясно, что я хочу сделать, если не сказать мне, и я объясню это более подробно.

Решение для конкретной проблемы, спасибо олегу:

    editoptions : {

    value : function(){
        //a function can be called here:
        currentRow=$("#order_items").getGridParam('selrow');
        currentState=$("#order_items").getCell(currentRow,"state");
                    nastyGeneratedThings=function(){
                                     ... do some nasty things with currentState
                                     ... and generate what you want
                                     }
                    return nastyGeneratedThings
    }

У меня возникли проблемы, потому что функция была вызвана только один раз.Поэтому я должен установить опцию воссоздать форму в Navgrid.

navGrid("#pager", {
            edit : true,
            add : true,
            del : true
        }, {
            height : 500,
            width : 500,
            // recreate the form every time when edit button is clicked.
            // Default is false.
            recreateForm : true
        }
        });

После этого моя функция срабатывает каждый раз, когда я нажимаю кнопку редактировать.Надеюсь, это кому-нибудь поможет.

1 Ответ

1 голос
/ 06 августа 2010

Свойство value из editoptions может быть не только строкой, но и функцией. Функция может возвращать либо строку типа «0: состояние0; 1: состояние1; 2: состояние2; 3: состояние3; 4: состояние4», либо объект типа {"0":"state0", "1":"state1", "2":"state2", "3":"state3", "4":"state4"}. Кстати, последний формат имеет некоторые преимущества: например, вы можете использовать ':', ';' внутри значений.

Функция не имеет параметров, но вы можете получить текущую выбранную строку с помощью строки, например getGridParam('selrow'), и с помощью getCell(rowid,iCol) или getCell(rowid,"state") текущего значения столбца "state".

Подробнее см. В описании свойства value на http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editoptions). Возможно, это решит вашу проблему?

...