Pregunta

¿Cómo reorganizar Javascript para ejecución de la función independiente de incluir la orden.

Una pregunta que asistencias, pero no responde por completo a mi pregunta: ¿se puede tener múltiples $ (document) ready (function () secciones? (la respuesta es sí, y que se ejecutan en el orden en que se añaden a jQuery.ready ()).

Estoy tratando de hacer mi Javascript que ha iniciado sesión en / no conectados en cuenta, a efectos de notificaciones convenientes, en mi BBG ninjawars.net . Tenía la esperanza de utilizar un sistema simple de tener el lado del servidor PHP escribir un setLoggedIn() llamada a la función javascript cuando una página está conectado, y escribir un llamado a clearLoggedIn() cuando una página está siendo visto sin iniciar sesión:

<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>

Problemas:

En la actualidad, el orden es:

  • definir setLoggedIn () y clearLoggedIn () globalmente (en nw.js)

  • Añadir código de la página / modificación de la información, permite llamarlo modifyPageLayout () que debe ser informado de que ha iniciado sesión en / de sesión cerrada a jQuery.ready () (en nw.js)

  • Llamada setLoggedIn () o clearLoggedIn () en línea etiquetas script en la página.

No sé cómo asegurarse de que las llamadas a setLoggedIn () o clearLoggedIn () se producen antes modifyPageLayout (), que se envuelve en un momento jQuery.ready () bloque, y que por lo tanto se ejecute siempre cargado el DOM .

  • Si he añadido setLoggedIn () y clearLoggedIn () para jQuery.ready) bloquea (, que serían ejecutados en el orden añadido, por lo que el orden se convertiría en: modifyPageLayout(), entonces setLoggedIn() o setLoggedOut() así que en jQuery. ready () bloques no cumple el objetivo.

  • setLoggedIn () y clearLoggedIn () actualmente se basan en nw.js código definido, así que no puedo llamarlos antes de incluir nw.js.

Una posible solución:

Yo podría retrasar la función modifyPageLayout escribiéndolo como:

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

Alguien tiene otras soluciones?

¿Fue útil?

Solución

Tal vez estoy perdiendo algo, lo siento si soy.

Pero para setLoggedIn () y clearLoggedIn (), wouldnt desea que sucedan alguna vez que alguien hace clic para entrar o salir? Así que entonces se podría añadir un controlador de eventos dentro de la document.ready que lidiar con eso.

Es de suponer que el hecho de que algo sucede cuando alguien se registra en o fuera podría ser utilizado para la función modifyPageLayout para decidir qué cosas y cómo muestran.

De todos modos, no estoy seguro de si la cuestión es más complicada que eso

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top