带有格式化程序选项的jqgrid选择列表列不起作用

Posted

技术标签:

【中文标题】带有格式化程序选项的jqgrid选择列表列不起作用【英文标题】:jqgrid select list column with formatter option not working 【发布时间】:2019-06-10 20:41:46 【问题描述】:

我正在使用 jqGrid JS v5.3.2。 我在服务器上有一个这样的键/值对列表

key|value
23|abc
12|bdc
100|fghe

现在,我使用两列来显示/编辑此列表,如下所示: ...


    label: 'thelist',
    name: 'key',
    hidden: true,
    editable: true,
    editrules: 
        edithidden: true
    ,
    edittype: 'select',
    editoptions: 
        dataUrl: function () 
            return "getlisthtmlfromserverURL";
        
    
,

    label: 'thelist',
    name: 'value',
    width: 150
,

...

我在第一列上方尝试了 formatter: 'select' 以消除第二列的需要(/有两个 jqgrid 列服务一个数据字段),但它不显示选择的文本/值。我的猜测是 jqgrid 在编辑期间加载(远程)选择内容,所以没有什么可显示的。问题是如何使用 colModel 中的一列来显示和编辑上述列表的数据字段? TIA

【问题讨论】:

【参考方案1】:

我想你还没有读过 the docs here ,所以你应该知道 select 类型的格式化程序不支持 dataUrl 选项 - 它只支持字符串和对象值 - 即值应该在它们进入网格之前被预定义.

为了拥有一个字段,您应该先获取键/值,然后再构建网格并将其作为值参数传递给 formatoptions。


    name:'key', 
    formatter:'select', 
    formatoptions : value:"23:abc;12:bdc;100:fghe",
    edittype: 'select',
    editoptions: 
        value:"23:abc;12:bdc;100:fghe"
    
 

更新

在自定义选项的情况下预加载选择不是那么困难。你应该这样做

$.ajax(
    url : "url_to get_select(s)",
    success : functon(....) 
        // build your select string here 
        // call the jqGrid with that string.
        $(...).jqGrid(...);
    
)

【讨论】:

谢谢托尼。我期待,对于像 jqGrid 这样的出色插件,考虑到我有几十个键/值列表(如果不是数百个),除了用户提供自定义代码之外,是否可以通过 jqgrid 框架自动执行这样的“预加载”?毕竟,一旦定义了格式化程序并提供了 dataUrl,jqGrid 就应该能够像加载网格内容一样加载列表。如果考虑性能,用户可以选择积极加载或延迟加载。 简单解释——dataUrl 只不过是获取键/值的附加 ajax——这意味着这些 ajax 调用应该在数据之前加载,因为网格不知道数据会做什么是。如果我们按照这个逻辑,网格的速度会非常慢,因为我们应该先加载选择的键/值,然后再加载数据,我们认为这是不可接受的 当然,托尼。我的建议是让用户可以在预加载和选择列表列的自定义代码之间进行选择。 网格有太多选项,添加新选项会使它像乳齿象。请看我更新的答案

以上是关于带有格式化程序选项的jqgrid选择列表列不起作用的主要内容,如果未能解决你的问题,请参考以下文章

共享首选项和 onPause 不起作用

仅从 Laravel 5.2 关系查询中选择特定列不起作用 [重复]

iOS Coredata 回滚不起作用

Javascript 隐藏/显示部分在重置时不起作用

jqgrid在IE8上不起作用

带有全选选项的 swift 3.0 多项选择