我正在使用Coldfusion和jqgrid。
有没有办法从查询结果中动态填充colModel editoptions?
答案 0 :(得分:0)
如果您需要动态设置1:female;2:male
之类的选项,那么我认为您使用指定列中包含1或2的数据填充网格。因此,您必须使用formatter: "select"
(请参阅the documentation)。因此,您应该能够设置如下所示的属性
{name: "sex", formatter: "select", editoptions: { value: "1:female;2:male" }}
如果您需要动态设置此类选项,则需要从服务器加载有关editoptions.value
的信息。
您可以使用的最本机回调是beforeProcessing
。回调将在之前处理将使用格式化程序显示从服务器返回的数据。因此,可以对formatoptions
或editoptions
进行任何更改。
如果服务器响应现在看起来像
{
"rows": [
{"id": 123, "name": "John", "sex": "2"},
{"id": 456, "name": "Mary", "sex": "1"}
]
}
然后您可以将服务器响应的数据扩展到以下
{
"rows": [
{"id": 123, "name": "John", "sex": "2"},
{"id": 456, "name": "Mary", "sex": "1"}
],
"colModelExtentions": {
"sex": {"formatter": "select", "editoptions": {"value": "1:female;2:male"}}
}
}
您可以直接在服务器响应中指定colModel
的特定项目的某些更改。处理此类数据的beforeProcessing
回调的实现看起来像
beforeProcessing: function (data) {
var cmName, cmExt = data.colModelExtentions, $self = $(this),
p = $self.jqGrid("getGridParam");
for (cmName in cmExt) {
// enumerate properties of colModelExtentions like sex
if (cmExt.hasOwnProperties(cmName)) {
$self.jqGrid("setColProp", cmName, cmExt[cmName]);
}
}
}
并定义"sex"
中的colModel
列
{name: "sex", width: 50}
您可以在the answer和this one中找到有关该方案的更多详细信息。您可以扩展返回服务器的信息。如果您需要另外调用setColWidth
或setLabel
,则动态应用列宽和列标题文本。