1

如何重新排列独立于包含顺序的 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.ready setLoggedOut()() 块中的所有内容都不会完成意图。

  • 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

有人有其他解决方案吗?

4

1 回答 1

0

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

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

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

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

于 2009-11-25T18:16:42.160 回答