我正在使用kendo-ui的电子表格小部件,试图动态加载只读数据。由于据我所知,无法导入CSV文字,因此我正在使用jquery-csv库以及$ .map函数将CSV数据转换为适当的格式。
这就是我在做什么:
var rows = $.csv.toArrays(viewModel.Csv);
$("#spreadsheet-preview").data("kendoSpreadsheet").activeSheet().rows = $.map(rows, function(row) {
return {
"cells": $.map(row, function(cell) {
return {
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": cell
}
})
};
});
$("#spreadsheet-preview").data("kendoSpreadsheet").refresh();
此后,每当我在浏览器的控制台中检查$("#spreadsheet-preview").data("kendoSpreadsheet").activeSheet().rows
的结果时,返回的值都是:
[
{
"cells": [
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "John"
},
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "Smith"
},
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "5555551234"
},
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "user@email.com"
},
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "123 Main St"
},
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "Anytown"
},
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "LA"
},
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "12345"
},
{
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": "4/19/2020"
}
]
}
]
这就是我所希望的,但是,无论我设置了rows属性后调用了refresh()
如何,小部件都不会更新以反映新数据。
这是一个错误还是我只是缺少一些东西?
答案 0 :(得分:1)
所以,我知道15分钟前我问了这个问题,但是我能够解决该问题。
通过在rows
上设置activeSheet
,我正在创建返回对象的先前未定义的属性。相反,我必须调用fromJSON method并通过映射将具有rows
属性的对象传递给该方法。
这是解决方案:
$("#spreadsheet-preview").data("kendoSpreadsheet").activeSheet().fromJSON({
"rows": $.map(rows, function(row) {
return {
"cells": $.map(row, function(cell) {
return {
"background": "#ffffff",
"color": "#343a40",
"enable": false,
"value": cell
}
})
};
})
});