我正在使用我正在开发的网络应用程序中使用的库(Hubspot Odometer),它可以在页面上创建和运行里程表样式小部件。
问题是它们是仪表板界面的一部分,它具有通过AJAX加载的窗格。初始视图不是通过AJAX加载的,因此JavaScript执行正常并且里程表正确呈现。
当我加载带有里程表的新窗格时,它们没有正确渲染,也没有按照应有的方式运行。原因是里程表库作为一个大的IIFE运行。
我想知道的是,在通过AJAX加载内容后,我可以手动重新调用IIFE,以便正确显示里程表并将其绑定吗?
我也在使用jQuery,如果它为我提供了任何其他选项。
答案 0 :(得分:2)
答案 1 :(得分:2)
IIFE的整个想法是它的一个匿名函数立即执行。所以根据定义,没有办法重新执行它。
然而,尽管如此,您可以将函数表达式存储到全局变量中,然后执行它。例如
window.my_iife = (function() { /* stuff */ });
window.my_iife();
请注意与传统IIFE相比语法略有不同:((function() {})());
通过将函数存储在window
中,您可以稍后从开发人员控制台或代码中的任何其他位置访问该函数。如果您只是将其存储在var
中,或在某个地方将其声明为function my_iife() { /* ... */ }
,则可能会导致var
或函数声明本身被包裹在IIFE中,从而无法访问。例如,如果您声明var
/ function
in的文件是Sprockets清单(例如Rails中的application.js
)的一部分,则可能会出现这种情况。