【发布时间】:2010-12-20 09:12:50
【问题描述】:
如何重新排列独立于包含顺序的 javascript 函数执行顺序。
一个有帮助但没有完全回答我的问题的问题: Can you have multiple $(document).ready(function() sections?(答案是肯定的,它们按照添加到 jQuery.ready() 的顺序执行) .
为了方便通知目的,我正在尝试在我的 BBG ninjawars.net 上让我的 javascript 登录/未登录感知。我希望使用一个简单的系统,让服务器端php在登录页面时写出一个javascript函数调用setLoggedIn(),并在注销时查看页面时写出对clearLoggedIn()的调用:
<head>
...
<!-- All the global ninjawars javascript, defines the setLoggedIn(), clearLoggedIn(), and modifyPageLayout() functions and (currently) calls modifyPageLayout() within jQuery.ready() -->
<script type="text/javascript" src="js/nw.js"></script>
{if $logged_in} // Server-side check.
<script type="text/javascript">
<!--
setLoggedIn();
// -->
</script>
{else} // Server-side check found that the user was not logged in.
<script type="text/javascript">
<!--
clearLoggedIn();
// -->
</script>
{/if}
</head>
问题:
目前的顺序是:
全局定义 setLoggedIn() 和 clearLoggedIn()(在 nw.js 中)
-
添加页面/信息修改代码,我们称之为modifyPageLayout(),需要通知jQuery.ready()的登录/注销(在nw.js中)
李> 在页面的脚本标签中内联调用 setLoggedIn() 或 clearLoggedIn()。
我不知道如何确保对 setLoggedIn() 或 clearLoggedIn() 的调用发生在 modifyPageLayout() 之前,它当前包装在 jQuery.ready() 块中,因此会在加载 DOM 时运行.
如果我将 setLoggedIn() 和 clearLoggedIn() 添加到 jQuery.ready() 块中,它们将按照添加的顺序执行,因此顺序将变为:
modifyPageLayout(),然后是setLoggedIn()或 @987654328 @ 所以 jQuery.ready() 块中的所有内容都没有实现意图。setLoggedIn() 和 clearLoggedIn() 目前依赖于代码定义的 nw.js,所以我不能调用它们 在包含 nw.js 之前。
一种可能的解决方案:
我可以将 modifyPageLayout 函数写为:
modifyFunction = modifyPageLayout; // Non-executed first-class function variable. (created in nw.js)
setLoggedIn(); // inline in the head of the page
modifyFunction(); // inline in the head of the page
有人有其他解决方案吗?
【问题讨论】:
标签: javascript jquery login deferred-execution