如何重新排列独立于包含顺序的 javascript 函数执行顺序。
一个有帮助但不能完全回答我的问题的问题: 你可以有多个 $(document).ready(function() 部分吗?(答案是肯定的,它们按照添加到 jQuery.ready 的顺序执行())。
为了方便通知目的,我正在尝试在我的 BBG ninjawars.net上让我的 javascript 登录/未登录。我希望使用一个简单的系统,让服务器端 phpsetLoggedIn()
在页面登录时写出一个 javascript 函数调用,并在注销时写出一个对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()
jQuery.readysetLoggedOut()
() 块中的所有内容都不会完成意图。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
有人有其他解决方案吗?