如何重新排列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()之前,modifyPageLayout()当前包装在jQuery.ready()块中,因此只要加载DOM就可以运行。


如果我将setLoggedIn()和clearLoggedIn()添加到jQuery.ready()块中,则它们将按照添加的顺序执行,因此该顺序将变为:modifyPageLayout(),然后是setLoggedIn()setLoggedOut(),因此在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


有人还有其他解决方案吗?

最佳答案

也许我错过了一些东西,如果抱歉,我很抱歉。

但是对于setLoggedIn()和clearLoggedIn(),您是否希望它们在有人单击登录或注销时发生?因此,您可以在document.ready内添加一个事件处理程序。

据推测,当某人登录或注销时会发生某些事情的事实可以用于ModifyPageLayout函数来确定显示什么以及如何显示。

无论如何,我不确定问题是否比这更复杂

07-24 17:31