JS全局对象,调用公共方法时出错

时间:2014-07-03 15:07:43

标签: jquery javascript-objects

我在外部文件中定义了一个全局jQuery对象:

var App = function () {

    function handleTableRowSelection()
    {
        /*
        TRs being generated dynamically via json AJAX call. 
        Select nearest static element then pass in TRs.
        */
        $('table.allow-selection tbody').on('click', 'tr', function(e)
        {
            /*Don't change row class if clicking on a link (HTMLAnchorElement), or any other sub-element*/
            if ((e.target instanceof HTMLTableCellElement) == true)
            {
                var row = $(this);

                row.find('td').each(function()
                {
                    $(this).toggleClass('user-selected');
                });
            }
        });
    }

    return {
        init: function ()
        {
            handleTableRowSelection();
        },

    };
}();

当我调用App.init()时;在我的$(文档).ready中,它工作正常(来自我的主刀片模板),即使我没有将任何参数传递给handleTableRowSelection。

当我尝试从单个视图的子模板中调用App.handleTableRowSelection('#details', 'table.allow-selection tbody tr')时,我得到“未定义不是函数”。

我在我的主模板中调用init方法,如下所示:App.init();

我以为我能够访问App对象(我的IDE代码完成找到它),是不是这样?

1 个答案:

答案 0 :(得分:3)

App设置为IIFE,返回包含{ init: <your function> }的结构。在IIFE之外没有其他功能暴露在外 - 这是IIFE的整点,当这样使用时:为功能提供“私人”存储并导出公共接口。

如果您希望能够以该名称公开调用该函数,那么您的上一个return需要将其作为“导出”对象的属性提供:

return {
    init: function ()
    {
        handleTableRowSelection();
    },
    handleTableRowSelection: function () {
        handleTableRowSelection();
    }
};