【发布时间】:2016-09-16 21:40:24
【问题描述】:
(仅供参考,我使用的是 jqGrid 5。)
我的问题是关于 jqGrid 中的列过滤器。我有一个从服务器返回为布尔值的字段,“真”或“假”。我可能有幸将其更改为 0/1,但如果我能避免它,我真的不想这样做。所以,它看起来像这样:
{"rows":[{"rowID":47568,"field1":"some text here","isOpen":true} ...]}
在我的 jqGrid 中,我使用“beforeProcessing”函数将布尔值显示为“true”或“false”之外的其他值:
beforeProcessing: function(data) {
for(var i=0, len=data.rows.length; i< len; i++) {
data.rows[i].isOpenModified = openFormatter(data.rows[i].isOpen);
}
...
function openFormatter(isOpen) {
return isOpen ? '' : 'CLOSED';
}
如果 isOpen 为真,则将单元格留空,如果为假,则显示“已关闭”。到目前为止一切都很好。
我遇到的问题是工具栏过滤器字段的选择字段。这是jqGrid列模型:
colModel: [
{ name: 'field1', label: 'Stuff', width: 100},
{ name: 'isOpenModified', index:'isOpen', label: 'CLOSED',
searchoptions: { sopt:['eq'], value: ':All;" ":Open;"CLOSED":CLOSED'}, stype: 'select'},
],
这正确显示了“CLOSED”字段的选择框,但选择“All”以外的任何内容都不会显示任何内容。
我确实尝试将 isOpenModified 更改为 0 和 1,然后过滤器选择框起作用,但我当然无法提供。我的要求是显示空(isOpen==true)或“CLOSED”(isOpen==false)。
我觉得解决方案可能涉及列模型的名称和索引字段,但我无法确定我做错了什么。感谢您的宝贵时间....
【问题讨论】:
-
为什么在
name: 'isOpenModified'列中使用index:'isOpen'属性?我认为你应该首先删除它。此外,我建议您更改openFormatter以将 not empty string 设置为值(例如return isOpen ? ' ' : 'CLOSED';或return isOpen ? '' : 'CLOSED';, ... instead ofreturn isOpen ?' ' : 'CLOSED';searchoptions的) and fixvalue` 对应于您的更改。 -
感谢奥列格,我在发布问题后确实偶然发现了该解决方案,并且确实解决了最初的问题......但引入了另一个问题。 (见下面的答案)是的,我确实删除了索引规范 - 我一直对差异有点模糊。
-
不客气!告诉信任,我不明白您为什么要将
isOpen属性的原始布尔值更改为值true和false?为什么不直接使用{ name: 'isOpen', label: 'CLOSED', searchoptions: { sopt: ['eq','ne'], value: ':All;true:Open;false:CLOSED'}? -
因为这不是用户想要的。用户希望在 isOpen=true 时看到一个空白单元格,在 false 时看到“CLOSED”。 :-/ 有没有办法证明这一点,但仍然让搜索选项指定真/假?
-
好的,但我的意思是与格式无关。您可以定义任何自定义
formatter和unformat以以其他方式显示原始值。我想提一下 jqGrid 使用 加载的数据 进行过滤。我想您有问题是因为您使用可修剪空间作为false的值。我想使用'&nbsp;'或'&#160;'而不是' '可以解决您的问题。