Есть ли способ изменить значения поля состояния в 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. Надеюсь, это кому-то поможет.
Thx, что мне помогло. Я переоценил проблему, потому что я думал, что должен делать все, создавая сетку. Но это не так. Мне просто нужно реализовать свою логику до создания editForm. Я сделаю некоторое испытание завтра, infact, я думаю, что я не могу использовать его таким образом.Вы уверены, что я могу вызвать getCell() или что-то подобное в самой функции, потому что во время вызова сама строка не существует. Несколько дней назад у меня возникла аналогичная проблема в форматировании, я не смог получить какую-либо ценность из сетки. Затем я понял, что строки на самом деле не существует. Вы знаете, что я имею в виду? – evildead
Поле комментариев было слишком коротким, черт возьми :) Итак, если я переосмыслил проблему, не имеет значения, что я даю в colModel. Я могу ввести конкретные состояния непосредственно в форму до того, как я сделаю свое Редактирование. Или есть элегантный способ изменить поля в editform? например переопределите colModel перед рендерингом editForm. Или мне нужно сделать это вручную, удалив исходные состояния в форме и вставив только возможные состояния? – evildead
Вы можете очень просто определить, завершена ли загрузка (не задана переменная внутри 'loadCompleted', и сбросить ее в' beforeRequest' или 'loadBeforeSend'). При загрузке таблицы функция 'value' может возвращать полный список значений. Для редактирования уменьшенного списка значений из вашей функции 'значение' может быть важно только в редактировании больше. Разве это не так? – Oleg