在Handsontable中更新特定单元格

时间:2015-10-30 12:14:24

标签: javascript handsontable

是否可以强制仅更新一个td(单元格)进行查看? 有一种方法require 'open-uri' content = URI(your_url).read ,但它会重新渲染所有单元格。

我想使用ajax更新表内容JSON数据(hot.render()),但我无法找到如何强制渲染表。每次收到数据时,我的表都非常庞大。

如,

hot.getData()

是否可以在$.ajax(url,... ,success: function(d){ var data = hot.getData(); data[parseInt(d['row'],10)][d['col']] = d['value']; hot.render();//please, change this function into more simple. }, ... );

更新TD-cell

3 个答案:

答案 0 :(得分:4)

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

此问题的任何解决方案。

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

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

//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.
}

然而hot.setDataAtCell(i,ix,v)成本很高,所以如果你有大量的行,那么它会达到性能。但是好处是它会做自定义(单/多个)单元格/行渲染而不滚动网格并保留用户视图。

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

答案 1 :(得分:3)

重新渲染整个表是Handsontable允许你渲染的唯一方法,并且它有一些很好的理由。首先,由于正在使用虚拟渲染,因此表格的大小并不重要。这意味着它只会呈现您可以看到的内容以及更多行。即使您拥有数万亿行和列,它仍然只能渲染到足以让您认为它已完全渲染。假设您没有使用自定义渲染器做一些时髦的事情,这不是一项繁重的任务。

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

答案 2 :(得分:0)

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

  

setDataAtCell(行,列,值,源)

     

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

     

来源: https://handsontable.com/docs/7.2.2/Core.html#setDataAtCell

例如:

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

hot.setDataAtCell(row, col, value); // Update a single cell

Method还接受一个值数组来一次更新多个单元格。例如:

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

请注意,Handsontable文档不建议手动重新渲染整个表格。

  

render()

     

不推荐,手动调用此方法。 Handsontable尝试通过选择生命周期中的最佳时刻来呈现自己。

     

来源: https://handsontable.com/docs/7.2.2/Core.html#render