jQuery / .NET /用户控件:一个页面上有两个控件,X的Callback从Y的调用中调用

时间:2012-10-21 23:16:25

标签: javascript jquery .net

我必须遗漏一些东西,因为我有另一个以相同方式构建的控件,但没有这个问题。我有一个jQuery网格控件,通过.NET的registerClientScriptInclude注册。两个网格上的所有内容都正常工作,但我正在调用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。奇怪的是,table变量设置为lookupGrid表变量的ID。到底是怎么回事?有人有任何想法吗?

1 个答案:

答案 0 :(得分: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引用将是一个名为grid的未定义document.window级变量。第二次运行该函数时,您将覆盖该变量及其对它的引用。