我在页面上使用多个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]));
// ....
但我的问题是我如何处理这些网格事件,因为事件应该单独实施,就我而言。即使我的所有网格必须具有相同的事件,我也不知道如何确定触发哪个网格的事件。
请帮帮我!!!非常感谢您的兴趣;)
答案 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);
// ....
}