Javascript jqGrid动态选择字段

Javascript jqGrid动态选择字段,javascript,jqgrid,javascript-objects,Javascript,Jqgrid,Javascript Objects,有没有办法动态修改colModel中状态字段的值? 假设我们有一个col模型,其字段如下: ... field ... name: "state",type: "select", editoptions: {value: "0:state0;1:state1;2:state2;3:state3;4:state4"} 因此,我得到了一个选择字段,用于我的状态和这个值。但我需要动态地决定哪些selectfields是可能的。 如果当前行的状态为state0,则只应显示state0和state1。

有没有办法动态修改colModel中状态字段的值? 假设我们有一个col模型,其字段如下:

... field ... name: "state",type: "select",
editoptions: {value: "0:state0;1:state1;2:state2;3:state3;4:state4"}
因此,我得到了一个选择字段,用于我的状态和这个值。但我需要动态地决定哪些selectfields是可能的。 如果当前行的状态为state0,则只应显示state0和state1。 如果状态为state1,则显示应为state0、state1和state2 以此类推,直到状态4,它应该只显示stae3和state4

我是否能够用格式化程序解决这个问题,或者是否有其他方法来解决这个问题

更困难的是,假设在我的应用程序中显示的状态通常取决于登录的用户。 在某种程度上,用户只能看到state0、state2和state4。 这可能会变得更加复杂,因为当前用户不允许在state3和state4之间进行转换

然而,国家本身也是动态的。为我的应用程序中的一个对象(它代表一个通用状态类)动态生成javascript,并使用这个对象在格式化程序中生成我需要的输出,这会有帮助吗? 因此,我可以在这个对象中封装逻辑,如何生成输出,另外,我只能得到用户能够看到的状态

应该让我一举两得

在重读之后,我希望它清楚地表明我想做什么,如果不告诉我,我会解释更多的细节

具体问题的解决方案,thx至oleg:

    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中设置recreateForm选项

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
        }
        });
之后,每次单击“编辑”时,我的函数都会激发。
希望这对某人有所帮助。

编辑选项中的
属性不仅可以是字符串,还可以是函数。函数可以返回类似“0:state0;1:state1;2:state2;3:state3;4:state4”的字符串或类似
{“0”:“state0”、“1”:“state1”、“2”:“state2”、“3”:“state3”、“4”:“state4”}
。顺便说一下,最后一种格式有一些优点:例如,您可以使用“:”、“;”在值的内部

该函数没有参数,但您可以使用coll-like
getGridParam('selrow')
方法和
getCell(rowid,iCol)
getCell(rowid,state”)
获取当前选定行的“状态”列的当前值


更多信息,请参见上的
属性的说明)。也许这可以解决你的问题?

Thx,这对我很有帮助。我高估了这个问题,因为我想在创建网格时我必须做所有的事情。但事实并非如此。我只需要在创建editForm之前实现我的逻辑。我明天要做一些测试,事实上我想我不能用这种方式。您确定我可以在函数本身中调用getCell()或类似的东西,因为在调用时,行本身不存在。几天前,我在格式化程序中遇到了类似的问题,我无法从网格中获取任何值。我意识到,争吵实际上并不存在。你知道我的意思吗?注释字段太短了,该死:)所以如果我重新思考这个问题,我在colModel中给出什么都不重要。在进行编辑之前,我可以将具体状态直接注入表单中。或者是否有一种优雅的方式来修改editform中的字段?e、 g.在呈现editForm之前覆盖colModel。或者我必须手动执行此操作,删除表单中的原始状态并仅插入可能的状态?您可以用非常简单的方式定义加载是否完成(例如,在
loadCompleted
中设置一个变量,并在
beforeRequest
loadBeforeSend
中重置它)。在表格加载期间,
函数可以返回完整的值列表。只有在编辑“更多”时,才需要从
value
函数返回减少的值列表。不是吗?动态更改
colModel
也是可能的。在上,您可以看到,无法更改有关
setGridParam
colModel
。是的,您不能用另一个
setGridParam
替换一个
colModel
,但是可以使用以下技巧更改
colModel
。首先,使用
var cm=$(“#list”).getGridParam(“colModel”)获取对
colModel对象的引用<代码>。然后使用
jQuery.extend(cm[iCol],{/*一些新属性:editoptions:{value:newV}*/});`修改一个列。这样行。嗨,奥列格,又是大thx了。我能做我想做的事。我编辑了我的主要帖子,所以有一个具体的解决方案。