Handsontable 使得从服务器向数组发送表值变得非常容易:
$('#dataTable').handsontable( data: serverdataarray )
到目前为止,一切都很好。但是,我想格式化数组中的一些列。
如果我有固定数量的列,我可以很容易地做到这一点:
$('#dataTable').handsontable({
data: serverdataarray ,
columns: [
{ data: "Entity", type: 'text', renderer: orangeFF9900 },
{ data: "Geography", type: 'text', renderer: orangeFF9900 },
{ data: "Description", type: 'text', renderer: orangeFF9900 },
{ data: "cost_month1", type: 'numeric' },
{ data: "cost_month1", type: 'numeric' }
]
});
我的问题是,从服务器发送的数据将具有不同数量的列,具体取决于多种因素。因此,我希望能够在服务器上动态生成格式化数组的列,并将其作为数组发送。IE:
var cols = [
{ data: "Entity", type: 'text', renderer: orangeFF9900 },
{ data: "Geography", type: 'text', renderer: orangeFF9900 },
{ data: "Description", type: 'text', renderer: orangeFF9900 },
{ data: "cost_month1", type: 'numeric' },
{ data: "cost_month1", type: 'numeric' }
]; // Strictly speaking this would be a string sent form the server, but you catch my drift
$('#dataTable').handsontable({
data: serverdataarray ,
columns: cols
});
但是,这样做时,我最终会遇到以下错误TypeError: method is not a function
jquery.handsontable-0.9.9-full.js Line: 3028
有问题的行 (3028) 是以下函数的返回行:
Handsontable.TableView.prototype.applyCellTypeMethod = function (methodName, td, row, col) {
var prop = this.instance.colToProp(col)
, cellProperties = this.instance.getCellMeta(row, col)
, method = Handsontable.helper.getCellMethod(methodName, cellProperties[methodName]); //methodName is 'renderer' or 'editor'
return method(this.instance, td, row, col, prop, this.instance.getDataAtRowProp(row, prop), cellProperties);
};
Handsontable 实际上设法在屏幕上呈现正确数量的列,尽管它们是空白的、未格式化的并且只有一行,所以我猜它是在推断出这么多的形式serverdataarray
而不是cols
.
关于如何实现我正在寻找的任何建议?
如果需要,我愿意更改 Handsontable 源代码。
谢谢