我已经完成了学业,我知道如何制作自定义格式化程序,或编辑器以及如何使用它。 我的问题是,我无法设置或使用格式化程序。 我的结构:
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="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>
以上都是未经编辑的。 实现网格的代码:
var grid; var cols; var rows; var options = {
enableCellNavigation: true,
enableColumnReorder: false,
forceFitColumns: true
};
*rows and cols come from server side via JSON.parse*
grid = new Slick.Grid("#results", rows, cols, options);
代码来自服务器并填充行和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(row,m)'不是函数
每次该死的时间我都会尝试加载表格,格式化程序搞砸了所有内容,我不知道下一步该做什么!我试图追踪这个bug,它引导我到slick.grid.js的源代码的1124.行,这个函数以某种方式用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");
答案 0 :(得分:2)
Slick.Formatters.PercentComplete
不应该是字符串。它是slick.formatters.js中定义的函数(类构造函数)。
答案 1 :(得分:2)
好吧我解决了!我解析了数据,然后将格式化程序字符串设置为一个对象:cols = JSON.parse(data); cols [3] .formatter = Slick.Formatters.PercentComplete;就是这样!谢谢您的帮助!
我会建议这样的事情。
Slick.Formatters.PercentComplete是一个函数,json中没有函数,如http://json.org所示。此外,验证在具有函数的JSON中失败。您可以在此处尝试验证:http://jsonlint.com/。
您无法使用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]}
意识到格式化程序仍然是一个字符串。然后我通过以下代码遍历所有列,将格式化程序从String更改为Function:
$.each(metadata.columns, function(index, value) {
if(typeof value.formatter != "undefined") {
value.formatter = eval(value.formatter);
}
});
答案 2 :(得分:0)
对于通过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));
}