2010-08-05 2 views
0

Есть ли способ изменить значения поля состояния в colModel динамически? Допустим, у нас есть Col Модель с поля, как:jqGrid динамические поля выбора

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

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

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

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

Тем не менее, состояния сами по себе являются динамическими. Было бы полезно динамически генерировать 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 
    } 

Я побежал в неприятности, причиной функция была только раз. Поэтому я должен установить опцию recreateForm в 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 
     } 
     }); 

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

ответ

1

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") текущим значением столбца «состояние».

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

+0

Thx, что мне помогло. Я переоценил проблему, потому что я думал, что должен делать все, создавая сетку. Но это не так. Мне просто нужно реализовать свою логику до создания editForm. Я сделаю некоторое испытание завтра, infact, я думаю, что я не могу использовать его таким образом.Вы уверены, что я могу вызвать getCell() или что-то подобное в самой функции, потому что во время вызова сама строка не существует. Несколько дней назад у меня возникла аналогичная проблема в форматировании, я не смог получить какую-либо ценность из сетки. Затем я понял, что строки на самом деле не существует. Вы знаете, что я имею в виду? – evildead

+0

Поле комментариев было слишком коротким, черт возьми :) Итак, если я переосмыслил проблему, не имеет значения, что я даю в colModel. Я могу ввести конкретные состояния непосредственно в форму до того, как я сделаю свое Редактирование. Или есть элегантный способ изменить поля в editform? например переопределите colModel перед рендерингом editForm. Или мне нужно сделать это вручную, удалив исходные состояния в форме и вставив только возможные состояния? – evildead

+0

Вы можете очень просто определить, завершена ли загрузка (не задана переменная внутри 'loadCompleted', и сбросить ее в' beforeRequest' или 'loadBeforeSend'). При загрузке таблицы функция 'value' может возвращать полный список значений. Для редактирования уменьшенного списка значений из вашей функции 'значение' может быть важно только в редактировании больше. Разве это не так? – Oleg

Смежные вопросы