【问题标题】:ColModel jqgrid different label nameColModel jqgrid 不同的标签名称
【发布时间】:2013-10-10 15:24:57
【问题描述】:

我正在使用 jqgrid 创建网格。这个有“主要”一个,里面有标题和数据等,还有“高级搜索”。不幸的是,他们都使用相同的 getColModel,我希望在提前搜索时使用不同的标题和 colname。例如我有这样的东西

getColModel: ->
    [ 
      {name:'dispId', label:  i18n('ProjectList.dispId'), classes:'grid_col', width:6, searchoptions:{sopt:filterOperators.string}, formatter: ((cellvalue, options, rowObject) -> "<a href=\"#{url("/project/#{options.rowId}/view")}\">#{cellvalue}</a>")}

]

并且 i18n('ProjectList.disp') 在预先搜索的列和列名中显示。我的英语真的很糟糕,但我希望你明白我想要做什么 - 我想在主网格和高级搜索选项中有不同的标题,我不想只在我自己的 *.js 脚本中更改 jqgrid 源中的任何内容. (也许 colModel 中的某些属性?找不到想法,我正在寻找解决方案)\

我相信我称之为“寻呼机”的高级搜索选项

我将此添加到我的初始化网格中

afterRedraw: ->
                $("#{gridId} select").find("option[value='expectedRealizationDate']").html(i18n('ProjectList.expectedRealizationDate'))
                $("#{gridId} select").find("option[value='closing']").html(i18n('ProjectList.closing'))

它有效,但只有当我打开高级搜索时,当我添加新的过滤器标签名称时会再次失明

【问题讨论】:

    标签: java jquery jqgrid


    【解决方案1】:

    grid.filter.js 中的 jqGrid 代码显式使用 colModel namelabel 在下拉列表中生成选项:

    str += "<option value='"+that.p.columns[i].name+"'" +selected+">"+that.p.columns[i].label+"</option>";
    

    因此,除非对 jqGrid 本身进行修改,否则您将无法使用 jqGrid API 实现您想要的。


    也就是说,在不修改 jqGrid 的情况下,您可能可以随意使用 afterRedraw 函数将标签替换为自定义标签。代码不会很漂亮,但你也许可以让它工作......

    【讨论】:

    • 好吧,我几乎做到了,但仍然不能很好地工作。我添加到我的初始化网格` afterRedraw: -> $("#{gridId} select").find("option[value='expectedRealizationDate']").html(i18n('ProjectList.expectedRealizationDate')) $(" #{gridId} select").find("option[value='closing']").html(i18n('ProjectList.closing'))` 它有效,但仅在我“添加”新的搜索选项之前,当我关闭高级搜索并重新打开它,然后出现字段名称,你知道我做错了什么吗?我将此代码添加到我的主要问题中,因为这里的编码对我不起作用:|
    • 不确定,也许您需要添加另一个事件处理程序。您可能想查看文档,看看是否有任何其他处理程序可以搭载。
    • 是的,但是在文档中“afterRedraw”=“[...]过滤器每次添加或删除规则或字段时都会重绘”所以它应该可以工作,谢谢你的回答顺便说一句
    • 好点。您可能想尝试调试它。下载的 zip 中应该有一个完整源代码的 jqGrid 版本,作为单个文件的一部分,您可以尝试使用该版本并使用 firebug 进行调试。没问题,只是想帮忙……
    • 我发现添加过滤器后只有一个被调用的函数。 this.reDraw = function() { $("table.group:first",this).remove(); var t = this.createTableForGroup(p.filter, null); $(this).append(t); if($.isFunction(this.p.afterRedraw) ) { this.p.afterRedraw.call(this, this.p); } }; 追加后创建了新过滤器并且它没有进入 if,我可能不完全理解它,但我认为如果我添加不再为 null 的函数,它应该进入那个
    【解决方案2】:

    如果有人想知道怎么做,这里有一个答案

    $(@gridId).jqGrid('navGrid',@pagerId, {}, {}, {}, {}, {             
            afterRedraw: function() {
                    $("select").find("option[value='expectedRealizationDate']")
                               .html(i18n('ProjectList.expectedRealizationDate'));
                    $("select").find("option[value='closing']")
                               .html(i18n('ProjectList.closing'));
            }
    } );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多