edittype: select
使用和编辑列时multiple: true
,jqGrid 将数据作为逗号分隔值发送到服务器。是否可以将某些事件绑定到此特定列,该列将返回一个数组而不是逗号分隔值?
我想避免使用serializeEditData事件,因为
- 这是特定于网格的,而不是特定于列的,这对我来说很麻烦-我正在尝试将列逻辑与网格逻辑分开
- 将数组转换为字符串,然后再将字符串转换为同一个数组,这听起来不是一个好主意。
我认为您将不得不edittype: 'custom'
在案例中使用并提供您的自定义实现custom_element
和custom_value
方法editoptions
。如果需要读取来自自定义输入元素的值,jqGrid 将custom_value
使用参数参数调用方法'get'
。您的custom_value
方法实现可能会返回案例中的项目数组。
重要的是要了解,通常您需要实现自定义格式化程序,它允许显示为多选输入的数据数组。幸好formatter: "select"
有线路
cellval = cellval + "";
它将数组转换为逗号分隔的项目。由于该行,数组将通过使用转换为字符串.join(",")
并formatter: "select"
成功接受数组作为输入。
演示了上述方法。它使用以下代码:
{
name: "Subcategory",
width: 250,
formatter: "select",
edittype: "custom",
editoptions: {
value: {"1": "football", "2": "formula 1", "3": "physics", "4": "mathematics"},
custom_element: function (value, options) {
return $.jgrid.createEl.call(this, "select",
$.extend(true, {}, options, {custom_element: null, custom_value: null}),
value);
},
custom_value: function ($elem, operation, value) {
if (operation === "get") {
return $elem.val();
}
},
multiple: true
}
}
在上面的代码中,我使用$.jgrid.createEl
jqGrid 的现有代码创建多值选择。唯一需要做的就是从选项中移除custom_element
和移除custom_value
选项,以防止从setAttributes不必要地调用方法。如果修改代码行并在排除属性列表中包含和,则表达式可以简化为.setAttributes
"custom_value"
"custom_element"
$.extend(true, {}, options, {custom_element: null, custom_value: null})
options
我们得到的方式几乎与<select>
使用edittype: "select"
. 只有两个区别:
<select>
元素edittype: "custom"
将具有附加属性class="customelement"
<select>
元素edittype: "custom"
将被包裹(将是直接子元素)内部<span class="editable">...</span>
在我们的案例中,这种差异似乎并不重要。
更新:setAttributes
方法的代码现在固定在 gtihub 上 jqGrid 的主要代码中(参见建议和提交)。所以在 jqGrid 的下一个版本(4.4.1 更高版本)中,可以将代码减少custom_element
到
custom_element: function (value, options) {
return $.jgrid.createEl.call(this, "select", options, value);
}
请参阅相应的演示。