Jquery 如何在SlickGrid中设置格式化程序?
我已经做了研究,我知道如何制作自定义格式化程序或编辑器以及如何使用它。 我的问题是,我无法设置或使用格式化程序。 我的结构: jQuery包括:Jquery 如何在SlickGrid中设置格式化程序?,jquery,slickgrid,formatter,Jquery,Slickgrid,Formatter,我已经做了研究,我知道如何制作自定义格式化程序或编辑器以及如何使用它。 我的问题是,我无法设置或使用格式化程序。 我的结构: jQuery包括: <script type="text/javascript" src="jquery-1.7.2.min.js"></script> <script type="text/javascript" src="jquery.event.drag-2.2.js"></script>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery.event.drag-2.2.js"></script>
<script type="text/javascript" src="slick.core.js"></script>
<script type="text/javascript" src="slick.editors.js"></script>
<script type="text/javascript" src="slick.formatters.js"></script>
<script type="text/javascript" src="slick.grid.js"></script>
来自服务器并填充rows和cols变量的代码基本上如下所示:
cols:
echo json_encode('[
{"id":"price", "name":"Ár", "field":"price"},
{"id":"location", "name":"Elhelyezkedés", "field":"location"},
{"id":"egyeb", "name":"Lófasz", "field":"egyeb"},
{"id":"pic", "name":"Képek", "field":"pic", "formatter":"Slick.Formatters.PercentComplete"}
]');
rows:
echo json_encode('[
{"price": "5", "location":"AlsóBélaCsecselény", "egyeb":"lófasz", "pic":"1", "link":"ezittahelye"},
{"price": "6", "location":"qrsóBéqrcselény", "egyeb":"lófasz", "pic":"2", "link":"ezittahelye"},
{"price": "7", "location":"AlsóBélaqwqwrelény", "egyeb":"lófasz", "pic":"3", "link":"ezittahelye"},
{"price": "8", "location":"qwrCsecselény", "egyeb":"lófasz", "pic":"4", "link":"ezittahelye"}
]');
当pic列没有格式化程序时,一切都可以正常工作,网格也可以为列提供额外的属性,例如输入错误的“formatter”标记(如“fformatter”或其他)
但每次JSON代码具有“formatter”属性时,Javascript都会给我以下错误:
未捕获异常:TypeError:“getFormatter(行,m)”不是函数
每次我尝试加载表时,格式化程序都会把一切搞糟,我不知道下一步该怎么办!我试着追踪这个bug,它把我带到了1124。在slick.grid.js的源代码行中,这个函数以某种方式用return语句打破了一切
function getFormatter(row, column) {
var rowMetadata = data.getItemMetadata && data.getItemMetadata(row);
// look up by id, then index
var columnOverrides = rowMetadata &&
rowMetadata.columns &&
(rowMetadata.columns[column.id] || rowMetadata.columns[getColumnIndex(column.id)]);
return (columnOverrides && columnOverrides.formatter) ||
(rowMetadata && rowMetadata.formatter) ||
column.formatter ||
(options.formatterFactory && options.formatterFactory.getFormatter(column)) ||
options.defaultFormatter;
}
任何帮助都将不胜感激
编辑:以下是我从服务器获取代码的方式:
$.post( "queries.php?event=search&&phase=columns", $("#full_search").serialize(), function(data){
cols = JSON.parse(data);
alert(cols[1].id);
$.post( "queries.php?event=search&&phase=rows", $("#full_search").serialize(), function(data){
rows = JSON.parse(data);
alert(rows[1].link);
grid = new Slick.Grid("#results", rows, cols, options);
alert(grid.getData().length);
return false;
},"json");
return false;
},"json");
},"json");
Slick.Formatters.PercentComplete
不应为字符串。它是在slick.formatters.js中定义的函数(类构造函数)。slick.formatters.PercentComplete
不应是字符串。它是在slick.formatters.js中定义的函数(类构造函数)。对于通过JSON传输数据的用户,对象调用仍然必须用引号括起来;但是,我在slick.grid.js
文件中找到了它被释放的部分:
if (d) {
if(m.formatter){m.formatter=eval(m.formatter)} // make it an object call instead of string
stringArray.push(getFormatter(row, m)(row, cell, value, m, d));
}
对于通过JSON传输数据的用户,对象调用仍然必须用引号括起来;但是,我在
slick.grid.js
文件中找到了它被释放的部分:
if (d) {
if(m.formatter){m.formatter=eval(m.formatter)} // make it an object call instead of string
stringArray.push(getFormatter(row, m)(row, cell, value, m, d));
}
好吧,我解决了!我解析了数据,然后将格式化程序字符串设置为一个对象:cols=JSON.parse(data);cols[3]。格式化程序=Slick.Formatters.PercentComplete;就这样!谢谢你的帮助
我建议这样做
Slick.Formatters.PercentComplete是一个函数,json中没有函数,如中所示。此外,在具有函数的JSON中验证失败。您可以在此处尝试验证:
JSON中不能有函数。然后,在接收到“几乎是JSON”数据后,您需要在客户端上使用javascript解析它,就像您所做的那样
谢谢你的样品!
我也有同样的问题,这很有帮助
在我的例子中,我使用jQuery Ajax获取元数据:
req = $.ajax({type: 'GET',
url: url,
dataType: 'json',
async: false}).done(function(meta) { metadata = meta; });
返回的元数据如下所示:
{"errors":{},
"columns":[{"formatter":"TaskNameFormatter",
"field":"1",
"id":"1","width":220,"name":"Hierarchy1","cssClass":"cell-title"},
OTHERS_COLUMNS]}
请意识到格式化程序仍然是一个字符串。然后,我使用以下代码浏览所有列,将格式化程序从字符串更改为函数:
$.each(metadata.columns, function(index, value) {
if(typeof value.formatter != "undefined") {
value.formatter = eval(value.formatter);
}
});
好吧,我解决了!我解析了数据,然后将格式化程序字符串设置为一个对象:cols=JSON.parse(data);cols[3]。格式化程序=Slick.Formatters.PercentComplete;就这样!谢谢你的帮助
我建议这样做
Slick.Formatters.PercentComplete是一个函数,json中没有函数,如中所示。此外,在具有函数的JSON中验证失败。您可以在此处尝试验证:
JSON中不能有函数。然后,在接收到“几乎是JSON”数据后,您需要在客户端上使用javascript解析它,就像您所做的那样
谢谢你的样品!
我也有同样的问题,这很有帮助
在我的例子中,我使用jQuery Ajax获取元数据:
req = $.ajax({type: 'GET',
url: url,
dataType: 'json',
async: false}).done(function(meta) { metadata = meta; });
返回的元数据如下所示:
{"errors":{},
"columns":[{"formatter":"TaskNameFormatter",
"field":"1",
"id":"1","width":220,"name":"Hierarchy1","cssClass":"cell-title"},
OTHERS_COLUMNS]}
请意识到格式化程序仍然是一个字符串。然后,我使用以下代码浏览所有列,将格式化程序从字符串更改为函数:
$.each(metadata.columns, function(index, value) {
if(typeof value.formatter != "undefined") {
value.formatter = eval(value.formatter);
}
});
编辑了这篇文章,展示了如何通过post调用获取JSON。这有什么办法吗?如果我放弃“Slick.Formatters.PercentComplete”中的撇号,则孔脚本将在JSON.parse行中断。将“formatter”:“Slick.Formatters.PercentComplete”更改为“formatter”:Slick.Formatters.PercentComplete。然后孔脚本将在JSON.parse行中断。。有办法解决这个问题吗?我不确定我应该如何通过post请求发送JSON代码。是的,它不是JSON。它是一个javascript对象。不知道你需要用php做什么。好吧,我解决了!我解析了数据,然后将格式化程序字符串设置为一个对象:cols=JSON.parse(data);cols[3]。格式化程序=Slick.Formatters.PercentComplete;就这样!谢谢你的帮助!编辑了这篇文章,展示了如何通过post调用获取JSON。这有什么办法吗?如果我放弃“Slick.Formatters.PercentComplete”中的撇号,则孔脚本将在JSON.parse行中断。将“formatter”:“Slick.Formatters.PercentComplete”更改为“formatter”:Slick.Formatters.PercentComplete。然后孔脚本将在JSON.parse行中断。。有办法解决这个问题吗?我不确定我应该如何通过post请求发送JSON代码。是的,它不是JSON。它是一个javascript对象。不知道你需要用php做什么。好吧,我解决了!我解析了数据,然后将格式化程序字符串设置为一个对象:cols=JSON.parse(data);cols[3]。格式化程序=Slick.Formatters.PercentComplete;就这样!谢谢你的帮助!