[英]How to get handson table data in json format with column header as key
我有手持设备,我想将手持设备上的数据输入到服务器端。 我试图在代码下面运行,但数据不是预期的格式。 我期望以纯 json 格式获取数据作为列标题作为键。
html代码
<div class="handsontable" id="example"></div>
<input type="button" name="submit" value="submit" onclick="submitForm()" />
创建handsontable的代码
$(document).ready(function () {
$('#example').handsontable({
startRows: 2,
startCols: 2,
rowHeaders: true,
colHeaders: true,
contextMenu: true,
});
});
从handsontable中提取信息的代码
function submitForm(){
var $container = $('#example');
var htContents = JSON.stringify($container.handsontable('getData'));
alert(htContents);
}
目前handsontable有2行2列。 现在,如果我按下单元格值 (1,1)=11,(1,2)=12,(2,1)=21 和 (2,2)=22 的按钮,我得到的结果是在警报窗口中
[["11","12"],["21","22"]]
但我期待的结果是
[{"A":"11","B":"12"},{"A":"21","B":"22"}]
其中 A 和 B 是列标题。
对于其他没有立即发现答案的人,请参阅上面@hakuna1811 的评论,因为从 Handsontable 的 0.20.0 版开始,如果您想以与提供的格式相同的格式恢复数据,则应.getSourceData()
调用- 例如作为对象数组。 目前尚不清楚为什么.getData()
调用的行为被修改,并且在@hakuna1811 评论中提到的相关GitHub 问题中没有解释,但至少我们有一个可行的解决方案 - 再次感谢 @hakuna1811 的回答 - 它保存了很多狩猎!
太好了,您期待这样,但这不是该功能的工作方式:P
这是你真正想要的:
首先,您不会向我们展示您设置data
选项的位置。 如果您查看这个小提琴,我会使用不同的表示法生成一个 Handsontable 对象,该对象允许我指定data
的格式。
如果data
以我的方式显示,作为行对象数组,其中每个对象采用您描述的格式,那么 hot1.getData() 方法将返回您期望的内容。
就目前而言,我不知道您使用的是什么数据格式,因此要么采用这种实例化 HOT 的方式,要么向我们展示您是如何做的。
祝你好运!
您需要映射结果。 让我们假设htContents
是包含[["11","12"],["21","22"]]
变量
function buildObject(data) {
return {
'A': data[0],
'B': data[1]
};
}
var newResult = htContents.map(buildObject); // newResult must be expected data
getSourceData()
方法返回所需的格式,但不会反映屏幕上看到的正确的行和列顺序。 以下打字稿代码对我有用:
protected getVisualTableData(): object[] {
const tableData = [];
for (let i = 0; i < this.hot.countRows(); i++) {
tableData.push(this.visualObjectRow(i));
}
return tableData;
}
protected visualObjectRow(row: number): object {
const obj = {};
for (let i = 0; i < this.hot.countCols(); i++) {
obj[this.hot.colToProp(i)] = this.hot.getDataAtCell(row, i);
}
return obj;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.