我正在使用免费的jqgrid 4.13.0
我写了一个自定义格式化程序,但不幸的是,在对表进行排序或过滤后,我该列的单元格内容总是丢失。我可能在格式化程序功能中做错了什么,但还没有真正理解缺少了什么。任何人都可以发现我的错误?为什么它在内置程序中运行良好,而在我的程序中却不行。我从这个得到了启发:http://www.ok-soft-gmbh.com/jqGrid/CascadingFormater.htm
我可以看到这个例子是如何调用$.fn.fmatter.call
的,也许我也需要这样做。这是关键吗?不幸的是,如果我自己编写函数,我找不到任何关于如何做到这一点的留档。
这是我的设置:
var formatEnduser = function (cellValue, options, rowObject, action){
return rowObject.so_enduser_id == undefined ? '' : '<a href="index.php?module=Accounts&view=Detail&record='+rowObject.so_enduser_id+'">'+rowObject.so_enduser_name+'</a>';
}
$("#jqGrid").jqGrid({
datatype: "jsonstring",
datastr: jsonData,
jsonReader: {
root: 'rows',
id: 'crmentity_id',
repeatitems: false,
page: function(obj) { return 1; },
total: function(obj) { return 1; },
records: function(obj) { return obj.rows.length; },
},
autowidth: true,
height: 600,
shrinkToFit: true,
rownumbers: true,
rowNum: 5,
pager: false,
loadonce: true,
viewrecords: true,
colModel: [
{
name: 'crmentity_id',
key: true,
hidden: true
},
{
label: 'Enduser',
name: 'so_enduser_name',
searchoptions: {
sopt : ['cn']
},
formatter: formatEnduser
},
]
});
$('#jqGrid').jqGrid('filterToolbar');
对象jsonData如下所示:
Object { rows=[623], so_total_total=4321, in_total_total=1234 }
在属性row
中可以找到以下内容:
[Object { crmentity_id="60199", so_enduser_id="6808", so_enduser_name="enduser123", mehr...}, Object { crmentity_id="60136", so_enduser_id="6362", so_enduser_name="userend321", mehr...}, 620 mehr...]
非常感谢您的帮助!
编辑:我添加了一个JSFIDLE来演示这个问题,在过滤器中搜索end并查看数据是如何消失的。排序也是如此。http://jsfiddlehtml" target="_blank">.net/tztj9yn7/2/
主要问题是您的代码如下。您使用datatype:"jsonstring"
,自定义格式化程序使用输入数据的属性so_enduser_id
,但该属性不是网格的列。数据类型"jsonstring"
将以与数据类型"json"
(或"jsonp"或"xml"
)相同的方式处理。它将由jqGrid读取并仅本地保存来自colModel
和jsonReader.id
的列。因此,输入数据的属性so_enduser_id
将仅在网格的初始读取期间在rowObject
中可用。到目前为止,我为旧jqGrid和免费jqGrid编写的所有内容都是相同的。
如果使用旧的jqGrid,有两种替代方法可以解决此问题:
如果您需要直接从URL加载数据,那么第二种方式(datatype:"local"
)将是不可能的,唯一的方法是为您以后需要的所有属性使用隐藏列。
Free jqGrid为您提供了另一种非常简单的方法:addtionalProperties
选项的使用。addtionalProperties
的想法非常简单。有时需要从每一项输入数据中保存一些附加属性,以便以后在本地使用(因为使用了loadonce: true
)。将数据保存在DOM中比将数据保存在JavaScript结构中要昂贵得多。人们可以使用addtionalProperties:["crmentity_id","so_enduser_id"]
等选项通知免费jqGrid读取一些其他属性并将其保存在本地。因此,您的代码将立即修复:请参阅http://jsfiddle.net/tztj9yn7/3/
关于在免费jqGrid中使用自定义格式化程序的另一个重要建议。rowObject参数存在一些重要问题。它只是输入项,与源中的输入项完全相同。因此,如果您使用数据类型:“xml”,那么参数将是xml节点。同样,如果要使用重复项:true格式([“60199”、“6808”、“enduser123”]
而不是{crmentity\u id:“60199”,so\u enduser\u id:“6808”,so\u enduser\u name:“enduser123”}
),则必须使用行对象[1]
而不是行对象。so\u enduser\u id
从初始输入数据访问属性。在下一次排序或筛选时,您将使用另一种格式的行对象(rowObject.so\u enduser\u id
),因为输入数据将是来自本地数据参数的数据。免费jqGrid仍然使用相同格式的rowObject参数,以提供与旧版本jqGrid的最佳兼容性,但它额外设置了选项参数的rowData属性。选项。rowData始终具有确定性的命名数据格式,并且可以始终使用选项。行数据。因此\u enduser\u id
独立于输入数据的格式和使用的数据类型。因此,选项。rowData是访问输入数据的首选方式。根本不应该使用第三个参数。格式化程序的结果代码将为
var formatEnduser = function (cellValue, options) {
var item = options.rowData;
return item.so_enduser_id == undefined ?
'' :
'<a href="index.php?module=Accounts&view=Detail&record=' +
item.so_enduser_id + '">' + item.so_enduser_name + '</a>';
};
看见http://jsfiddle.net/tztj9yn7/4/
当我尝试在日期格式选项中使用正确的数据(包括时间,例如:2018-01-01 07:00:00))添加或编辑新行时,我尝试在日期格式选项中使用“newform: Y-m-d H: i: s”总是返回无效的日期警告。 有人能帮我把它正常工作吗? JSFIDLE:链接
我使用的是free-jqgrid 4.15.6。我正在使用内置的货币格式化程序,它可以完美地格式化数字。我在格式化选项中使用前缀:'$',defaultValue:"。 当网格首次加载时,货币列为空的行在网格中不显示应有的格式。 但是在内联编辑之后,当编辑控件中没有输入任何内容(意味着控件没有输入任何值)时,在编辑之后,预定义的格式化程序会在单元格中显示“$”,而不是根据需要显示空白。 查看源代码
(版本免费jqgrid 4.13.6) 我有一些datetime列,我将其定义为{…格式化程序:“date”…},没关系。 现在,在某些情况下,根据字段值,我需要使用另一个自定义格式化程序。由于formatter:"date"是jqgrid原生的,我不知道如何解决这种情况。 示例:通常字段值是datetime,例如“2017-04-18 10:06”,这对于格式化程序来说是可以的:“date”。但
我们发现,再次使用GridUnload和grid load时,工具栏搜索将被完全删除: 此行已删除完成。
前言 我们接着上一篇文章01-04来讲。 过滤器的概念 概念:Vue.js 允许我们自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值表达式、 v-bind表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示。 Vue1.X中的系统过滤器 Vue提供了一系列的固定逻辑来使程序员更加容易的实现这些功能,这些过滤器称之为系统过滤器。
我是Spring MVC的新手,我刚刚遇到Spring自定义格式化程序。所以我试图为java.util.date创建一个自定义格式化程序。 MyDateFormatter.java