如何在页面上管理多个Slickgrids事件?

时间:2014-02-21 22:09:33

标签: javascript javascript-events event-handling slickgrid multiple-tables

我在页面上使用多个Slickgrids时遇到问题。由于网格数量动态变化,我在javascript函数中创建它们并使用网格数组保存它们如下所示。

var columns = [];
var options = [];
for(var i=0; i<value; i++){
   options[i] = {
    editable: true,
    enableAddRow: true,
    enableCellNavigation: true,
    asyncEditorLoading: true,
    autoEdit: false,
    forceFitColumns: false,
    //fullWidthRows: true,
    syncColumnCellResize: true,
    rerenderOnResize: true,
    topPanelHeight: 30,
    rowHeight: 22,
    cellHighlightCssClass: "changed",
    cellFlashingCssClass: "current-server"};
}
for(var i=0; i<value; i++) {
   columns[i].push({id: value, name: value, field: value});
   columns[i].push({id: value2, name: value2, field: value2});
   columns[i].push({id: value3, name: value3, field: value3});
}
var arrayOfGrids = [];

for(var i=0; i<value; i++) {
  dataView = new Slick.Data.DataView();
  arrayOfGrids.push(new Slick.Grid('#' + i, dataView, columns[i], options[i]));
    // ....

但我的问题是我如何处理这些网格事件,因为事件应该单独实施,就我而言。即使我的所有网格必须具有相同的事件,我也不知道如何确定触发哪个网格的事件。

请帮帮我!!!非常感谢您的兴趣;)

1 个答案:

答案 0 :(得分:0)

您熟悉Javascript中的闭包概念吗?如果没有,你应该谷歌。

以下是我认为他们可以解决您的问题的方法:

1)创建一个自己的函数来创建/初始化你的网格

2)在for-loop中调用此函数

3)在initGrid函数中订阅您的事件。这样,您将始终具有对正确网格的引用。 (在下面的代码中查看initGrid函数中的注释)

function initGrid(index)
{
  var dataView = new Slick.Data.DataView();
  var grid = new Slick.Grid('#' + index, dataView, columns[index], options[index]);
  arrayOfGrids.push(grid);
  grid.onClick.subscribe(function (e) {
     //grid variable will always be the clicked gird
     //index variable will always be the correct one for this grid
     //columns[index] will always be the columns for the clicked grid
     //...
  });
}

for(var i=0; i<value; i++) {
    initGrid(i);
    // ....
}