0

我在地图上有一些标记,在 slickgrid 中有相同数量的行?

我想要的是当单击标记时,标记的 id 与所有行匹配,并且应该选择相应的行。

这是我的代码:

var $canvas = $(grid.getCanvasNode());
var $allRows = $canvas.find('.slick-row');

    $($allRows).each(function() {
        if ($(this).rowID == selectedMarker) {
            $(this).addClass("active-row"); 
            grid.scrollRowIntoView($(this).index());
        }
    });

仅当网格中存在我想要的行但网格 DOM 一次仅包含 8 行(网格有 30 行)时,它才能正常工作。

如何遍历所有数据?

4

1 回答 1

2

您根本不应该修改 SlickGrid 的 DOM。SlickGrid 将覆盖任何更改,因为它仅呈现视图中的行(带有一些缓冲区)。当您滚动经过该缓冲区时,您对 DOM 所做的任何更改都会丢失。

您必须更改行的数据并允许 SlickGrid 在渲染时将适当的类添加到 DOM。

编辑

SlickGrid 设置:

dataView.getItemMetadata = metadata(dataView.getItemMetadata);

function metadata(metadataProvider) {
  return function(row) {
    var item = this.getItem(row),
        ret = metadataProvider(row);

    if (item && item.isActive) {
      ret = ret || {};
      ret.cssClasses = (ret.cssClasses || '') + ' active-row';
    }

    return ret;
  };
}

然后,当您单击标记时:

var item = dataView.getItemById(selectedMarker);
var row  = dataView.getRowById(selectedMarker);
item.isActive = true;
dataView.updateItem(item.id, item);
grid.scrollRowIntoView(row);
于 2013-04-17T23:20:21.583 回答