Javascript 可手持无限滚动添加数据并应用合并单元格格式

Javascript 可手持无限滚动添加数据并应用合并单元格格式,javascript,handsontable,Javascript,Handsontable,我正在使用handsontable,希望使用无限滚动来追加数据。我可以通过一个简化的示例实现这一点,使用: Array.prototype.push.apply 我希望找到一个可手持的方法,允许我附加数据,但我搜索了又搜索,什么也没找到。也许我遗漏了什么,如果是这样的话,我真的很感激你能提供的任何指导 以下是我的简化无限滚动示例: $(文档).ready(函数(){ 风险值数据=[ [、“玛莎拉蒂”、“马自达”、“梅赛德斯”、“迷你”、“三菱”], ["2000", 0, 2941, 4303

我正在使用handsontable,希望使用无限滚动来追加数据。我可以通过一个简化的示例实现这一点,使用:

Array.prototype.push.apply

我希望找到一个可手持的方法,允许我附加数据,但我搜索了又搜索,什么也没找到。也许我遗漏了什么,如果是这样的话,我真的很感激你能提供的任何指导

以下是我的简化无限滚动示例:

$(文档).ready(函数(){
风险值数据=[
[、“玛莎拉蒂”、“马自达”、“梅赛德斯”、“迷你”、“三菱”],
["2000", 0, 2941, 4303, 354, 5814],
["2001", 5, 2905, 2867, 412, 5284],
["2002", 0, 2941, 4303, 354, 5814],
["2003", 5, 2905, 2867, 412, 5284],
["2004", 4, 2517, 4822, 552, 6127],
["2005", 0, 2941, 4303, 354, 5814],
["2006", 5, 2905, 2867, 412, 5284],
["2007", 4, 2517, 4822, 552, 6127],
["2008", 0, 2941, 4303, 354, 5814],
["2009", 5, 2905, 2867, 412, 5284],
["2010", 4, 2517, 4822, 552, 6127],
["2011", 2, 2422, 5399, 776, 4151],
["2012", 0, 2941, 4303, 354, 5814],
["2013", 5, 2905, 2867, 412, 5284],
["2014", 4, 2517, 4822, 552, 6127],
["2015", 2, 2422, 5399, 776, 4151],
];
var moreData=[
["2016", 10, 11, 12, 13, 14],
["2017", 20, 11, 14, 14, 10],
["2018", 30, 15, 12, 13, 25],
["2019", 20, 11, 14, 14, 10],
["2020", 30, 15, 12, 13, 25]
];
var$container2=$(“#HoT2”);
$container2.0可手持({
数据:数据,
colHeaders:是的,
上下文菜单:正确,
});
$(窗口)。滚动(函数(){

if($(document).height()如我的评论中所述,如果您想在滚动时更新表的设置(参考:更新mergeCells设置),那么在我看来,一个更通用的函数是必需的……至少要简单得多:)

这一行是您每次滚动时需要执行的操作:

$container.handsontable('updateSettings', ({mergeCells: merge()}));
(您会注意到我在表格初始化后使用过一次)


请参阅下面的函数,该函数基于示例中的数据结构,在列1的值重复时合并列1和列2:

function merge() {
  var mergeCells=[], rowspan=1, tempName = '';

  for(var i=0; i<$container.handsontable('getData').length;i++) {
    if ($container.handsontable('getDataAtCell', i,1) === tempName) {
      rowspan+=1;
    } 
    else  {
      mergeCells.push({row:i-rowspan, col:0, rowspan:rowspan, colspan:1})
      mergeCells.push({row:i-rowspan, col:1, rowspan:rowspan, colspan:1})
      rowspan=1
    }
    tempName = $container.handsontable('getDataAtCell', i,1);
  }
  return mergeCells;
}
函数合并(){
var mergeCells=[],rowspan=1,tempName='';

对于(var i=0;i,如我的评论中所述,如果您想在滚动时更新表的设置(参考:更新mergeCells设置),在我看来,一个更通用的函数是强制性的……至少要简单得多:)

这一行是您每次滚动时需要执行的操作:

$container.handsontable('updateSettings', ({mergeCells: merge()}));
(您会注意到我在表格初始化后使用过一次)


请参阅下面的函数,该函数基于示例中的数据结构,在列1的值重复时合并列1和列2:

function merge() {
  var mergeCells=[], rowspan=1, tempName = '';

  for(var i=0; i<$container.handsontable('getData').length;i++) {
    if ($container.handsontable('getDataAtCell', i,1) === tempName) {
      rowspan+=1;
    } 
    else  {
      mergeCells.push({row:i-rowspan, col:0, rowspan:rowspan, colspan:1})
      mergeCells.push({row:i-rowspan, col:1, rowspan:rowspan, colspan:1})
      rowspan=1
    }
    tempName = $container.handsontable('getDataAtCell', i,1);
  }
  return mergeCells;
}
函数合并(){
var mergeCells=[],rowspan=1,tempName='';

for(var i=0;i基本上您要查找的是
$container.handsontable('updateSettings',({mergeCells:newMergeCells}));
但我强烈建议您,如果您想在滚动时修改表的设置,请编写一个更通用的函数。例如,一个根据新数据检测要合并的单元格的函数。然后您可以使用updateSettings函数,这样就不会有太大的不一致性。基本上就是您想要的是
$container.handsontable('updateSettings',({mergeCells:newMergeCells}));
但是如果你想在滚动时修改表格的设置,我强烈建议你编写一个更通用的函数。例如,一个根据你的新数据检测要合并的单元格的函数。然后你可以使用updateSettings函数,而不会有太大的不一致性。谢谢Fap。你最初的评论引导我走向正确的方向。我最终使用JQuery merge来合并我的数据,这些数据是对象数组,例如
mergeData=$。merge(data,moreData);
谢谢Fap。您最初的评论引导我走向正确的方向。我最终使用JQuery merge来合并我的数据,这些数据是对象数组,例如
mergeData=$。merge(data,moreData);