【问题标题】:jqgrid column filter with select box with boolean data带有布尔数据的选择框的 jqgrid 列过滤器
【发布时间】: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 of return isOpen ?' ' : 'CLOSED';searchoptions) and fix value` 对应于您的更改。
  • 感谢奥列格,我在发布问题后确实偶然发现了该解决方案,并且确实解决了最初的问题......但引入了另一个问题。 (见下面的答案)是的,我确实删除了索引规范 - 我一直对差异有点模糊。
  • 不客气!告诉信任,我不明白您为什么要将 isOpen 属性的原始布尔值更改为值 truefalse?为什么不直接使用{ name: 'isOpen', label: 'CLOSED', searchoptions: { sopt: ['eq','ne'], value: ':All;true:Open;false:CLOSED'}
  • 因为这不是用户想要的。用户希望在 isOpen=true 时看到一个空白单元格,在 false 时看到“CLOSED”。 :-/ 有没有办法证明这一点,但仍然让搜索选项指定真/假?
  • 好的,但我的意思是与格式无关。您可以定义任何自定义 formatterunformat 以以其他方式显示原始值。我想提一下 jqGrid 使用 加载的数据 进行过滤。我想您有问题是因为您使用可修剪空间作为false 的值。我想使用'&amp;nbsp;''&amp;#160;' 而不是' ' 可以解决您的问题。

标签: search filter jqgrid


【解决方案1】:

我发现了原始问题的解决方案,但它提出了另一个问题。

需要修改搜索选项才能使其正常工作:

{ name: 'isOpenModified', label: 'CLOSED',
                   searchoptions: { sopt:['eq'], value: ':All; :Open;CLOSED:CLOSED'}, stype: 'select'} 

注意引号已从空格周围和 CLOSED 周围删除。

我还更改了格式方法以返回空格而不是空字符串:

return isOpen ? ' ' : 'CLOSED';

这会导致另一个问题:现在默认选择“打开”选项(但它没有被打开的项目过滤)。我试图通过颠倒顺序来解决这个问题:

{ name: 'isOpenModified', label: 'CLOSED',
                   searchoptions: { sopt:['eq'], value: ' :Open;:All;CLOSED:CLOSED'}, stype: 'select'} 

这是因为默认选择了“全部”,但它在列表中排名第二。我在等待那些“风格”的家伙来试一试。有什么建议吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-06
    • 2011-10-15
    • 2013-09-22
    • 2019-04-25
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多