Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新Handsontable中的特定单元格_Javascript_Handsontable - Fatal编程技术网

Javascript 更新Handsontable中的特定单元格

Javascript 更新Handsontable中的特定单元格,javascript,handsontable,Javascript,Handsontable,是否可以强制只更新一个td(小区)以供查看? 有一个方法hot.render(),但它会重新渲染所有单元格 我想使用ajax更新表内容JSON数据(hot.getData()),但找不到如何强制呈现表。我的表太大了,每次我收到数据时都要重新加载 例如: 是否可以在[行,列]处更新TD单元格?重新呈现整个表格是Handsontable允许您呈现的唯一方式,这有几个很好的理由。首先,不管您的表有多大,因为使用的是虚拟渲染。这意味着它将只渲染您可以看到的内容,再加上几行。即使有数以万亿计的行和列,它仍

是否可以强制只更新一个td(小区)以供查看? 有一个方法
hot.render()
,但它会重新渲染所有单元格

我想使用ajax更新表内容JSON数据(
hot.getData()
),但找不到如何强制呈现表。我的表太大了,每次我收到数据时都要重新加载

例如:


是否可以在
[行,列]
处更新TD单元格?

重新呈现整个表格是Handsontable允许您呈现的唯一方式,这有几个很好的理由。首先,不管您的表有多大,因为使用的是虚拟渲染。这意味着它将只渲染您可以看到的内容,再加上几行。即使有数以万亿计的行和列,它仍然会渲染到足以让您认为它已完全渲染。这不是一个密集的任务,假设您没有使用自定义渲染器做一些时髦的事情


它从头开始呈现所有内容的另一个原因是,它是Handsontable保持无状态DOM对象的方式。如果开始手动渲染特定单元格,则最终可能会出现外观不同步的表。同样,由于虚拟渲染限制了渲染的内容,因此没有与完全重新渲染相关的性能问题。

我同意完整网格渲染很好,但有一个缺点。当我们渲染完整网格时,它将滚动回第1行,它不会存储渲染前的最后一个视图。例如。一旦渲染网格返回到第1行,我就在第100行了,现在用户必须再次滚动到第100行,这很令人沮丧

这个问题的任何解决方案

我发现我们可以使用hot.selectCell(100,1)返回到第100行,但是如何以编程方式存储我们在第100行中的信息,以便将其设置回该行

我使用下面的代码做了一个customRendering来更改网格的值,但是当我们有大量行要更改时,它会有一些性能问题

//Below code will render one row ,similarly apply the loop to modify multiple row.

data.Records[i].Values.forEach(function(value, ix) {
hot.setDataAtCell(i, ix, value);
//i is row number , ix is the column number , v is the new value.
}
然而,setDataAtCell(i、ix、v)的成本很高,因此如果您有大量的行,那么它将影响性能。然而,它的好处是它将在不滚动网格和保留用户视图的情况下进行自定义(单个/多个)单元格/行渲染


另外,您可以使用setDataAtCell代替hot.setDataAtCell来设置行的值,但是我没有尝试过。

您可以使用
setDataAtCell()
方法来更新一个或多个单元格

setDataAtCell(行、列、值、源)

为单元格设置新值。要一次更改多个单元格(推荐方式),请将格式为
[[row,col,value],…]的更改数组作为第一个参数传递

资料来源:

例如:

var row = 3;
var col = 7;
var value = "Content of cell 3,7";

hot.setDataAtCell(row, col, value); // Update a single cell
var cell_3_7 = [3, 7, "Content of cell 3,7"];
var cell_5_2 = [5, 2, "Content of cell 5,2"];

hot.setDataAtCell([ cell_3_7, cell_5_2 ]); // Update a multiple cells
方法还接受一个值数组以一次更新多个单元格。例如:

var row = 3;
var col = 7;
var value = "Content of cell 3,7";

hot.setDataAtCell(row, col, value); // Update a single cell
var cell_3_7 = [3, 7, "Content of cell 3,7"];
var cell_5_2 = [5, 2, "Content of cell 5,2"];

hot.setDataAtCell([ cell_3_7, cell_5_2 ]); // Update a multiple cells
请注意,手写文档不建议手动重新呈现整个表格

render()

不建议手动调用此方法。Handsontable试图通过选择其生命周期中的最佳时刻来呈现自己

资料来源: