0

我一定遗漏了一些东西,因为我有另一个以相同方式构建的控件,但没有这个问题。我有一个通过 .NET 的 registerClientScriptInclude 注册的 jQuery 网格控件。两个网格上的所有内容都正常工作,但我正在调用 Datatables KeyTable 库中的一个函数,当用户通过网格键入并到达表格行的最末端时,该函数会强制页面更改,将它们移动到下一页。

当我注册这些控件时,它看起来像这样:

var lookupGrid = registerGrid('pageContent_tbl1',...)
var lookupGrid2 = registerGrid('pageContent_tbl2',...)

网格代码在一个嵌入资源的 JS 文件中:

var registerGrid = function (table, ...) {
  grid = {
    "oTable": $("#" + table).dataTable({
        "bProcessing": true,
         ...
    }),
"focusPostDraw": function (position) {
            var drawCB = function () {
                if (position === 'top') {
                    keys.fnSetPosition($('#' + table + " tbody tr:first td.canEdit:first ")[0].cellIndex, 0);
                    keys.fnRemoveFocus($('#' + table + " tbody tr:last td.canEdit:last "));
                } else if (position === 'bottom') {
                    var oSettings = inlineGrid.oTable.fnSettings();
                    keys.fnSetPosition($('#' + table + " tbody tr:last td.canEdit:last ")[0].cellIndex, oSettings._iDisplayLength - 1);
                    keys.fnRemoveFocus($('#' + table + " tbody tr:first td.canEdit:first "));
                } else {
                    // Do Nothing
                }
                grid.setInlineGridHandler(function () { });
            };
            grid.setInlineGridHandler(drawCB);
        }
    };
return grid;
}

当我调用 focusPostDraw 时,一切看起来都很棒,但是当我调用时:

grid.setInlineGridHandler(drawCB);

网格变量实际上是指向网格的lookupGrid2 实例,而不是lookupGrid。奇怪的是,表变量被设置为lookupGrid 的表变量的ID。到底是怎么回事?有人知道吗?

4

1 回答 1

0

声明范围内的变量。您的 js 文件应包含:

  var registerGrid = function (table, ...) {
  var grid = {
    "oTable": $("#" + table).dataTable({
        "bProcessing": true,
         ...
    }),
"focusPostDraw": function (position) {
            var drawCB = function () {
                if (position === 'top') {
                    keys.fnSetPosition($('#' + table + " tbody tr:first td.canEdit:first ")[0].cellIndex, 0);
                    keys.fnRemoveFocus($('#' + table + " tbody tr:last td.canEdit:last "));
                } else if (position === 'bottom') {
                    var oSettings = inlineGrid.oTable.fnSettings();
                    keys.fnSetPosition($('#' + table + " tbody tr:last td.canEdit:last ")[0].cellIndex, oSettings._iDisplayLength - 1);
                    keys.fnRemoveFocus($('#' + table + " tbody tr:first td.canEdit:first "));
                } else {
                    // Do Nothing
                }
                grid.setInlineGridHandler(function () { });
            };
            grid.setInlineGridHandler(drawCB);
        }
    };
return grid;
}

除非你这样做,否则你的grid引用将是一个未定义的 document.window-level 变量,名为grid. 第二次运行该函数时,您将覆盖该变量以及对它的引用。

于 2012-10-21T23:29:10.853 回答