我在外部文件中定义了一个全局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代码完成找到它),是不是这样?
答案 0 :(得分:3)
App
设置为IIFE,返回包含{ init: <your function> }
的结构。在IIFE之外没有其他功能暴露在外 - 这是IIFE的整点,当这样使用时:为功能提供“私人”存储并导出公共接口。
如果您希望能够以该名称公开调用该函数,那么您的上一个return
需要将其作为“导出”对象的属性提供:
return {
init: function ()
{
handleTableRowSelection();
},
handleTableRowSelection: function () {
handleTableRowSelection();
}
};