2010-01-09 14 views
5

tengo una aplicación asp.net mvc y estoy tratando de mover todo mi javascript en archivos js. ahora mismo tengo uno llamado sharedfunctions.js que se usa en todas partes.puedo llamar a un archivo js de otro.

El problema es que si muevo un código en un archivo js que llama a un método en el archivo sharedfunctions.js, parece que ya no funciona.

¿Cuál es la mejor manera de factorizar el código común entre los archivos js y permitirles que funcionen correctamente?

+0

duplicado: http://stackoverflow.com/questions/21294/how-do-you-dynamically-load-a-ja vascript-file-think-cs-include y http://stackoverflow.com/questions/1899494/an-other-way-to-load-a-js-file-in-js-code. Y agregando mi propio enlace http://codepaste.net/o6gq2n – ram

Respuesta

5

Mientras todos los archivos .js se hace referencia en la página inquestion, funciones/variables en todos ellos serán accesibles por cualquier otro una vez que la página tiene cargado.

Estoy destacando ese último bit porque puede ser la raíz de sus problemas. Puede ser que el orden que se están cargando los archivos .js sea incorrecto.

Si tiene algún javascript que se ejecuta inmediatamente (por ejemplo, no se desencadena por un evento de página), entonces bien puede comenzar a ejecutarse antes de que su archivo sharedfunctions.js se haya incluido en la página. En este caso, la función en sharedfunctions.js literalmente no existirá en el momento en que se ejecute el otro javascript.

Vea si puede ver el orden de las cosas para eliminar estos problemas. Por ejemplo, intente y asegúrese de que sharedfunctions.js se cargue como el primer archivo de script en la página.

En mi humilde opinión, esto es preferible a tratar de piratear sus archivos js existentes para cargar los contenidos de otros archivos js directamente.

-1

Use este patrón:

function IncludeJavaScript(jsFile) 
{ 
    document.write('<script type="text/javascript" src="' + jsFile + '"></scr' + 'ipt>'); 
} 
+1

Puede destruir todo el documento si está escrito en el lugar equivocado. –

+0

Aunque permite que un archivo incluya otro, seguramente es una mala práctica tener dependencias entre archivos administradas por los propios archivos.El intérprete de Javascript aún no analizará el archivo "incluido" hasta que el archivo que continúe la llamada a la función esté completamente cargado, en cuyo caso no importa de manera efectiva ningún código javascript que pueda ser utilizado por otro código en el archivo haciendo el importar. –

1

es el tema que usted piensa que su sobrescribir sus funciones con los falsos? Si ese es el caso antes de definir una función, puede verificar si ya la tiene definida.

si (typeof 'función' YourFunctionName ==)

0

La mejor manera es tenerlo todo en un solo archivo, y en su entorno de desarrollo, donde está dividido en archivo por clase o cualquiera que sea el método que utilice, simplemente inclúyalos en el orden correcto.

Si desea incluir un JS dinámicamente (usando Moo-herramientas atajos, aunque sólo tiene que utilizar sus elementos de bibliotecas)

$$('head')[0].adopt(new Element('script',{'type':'text/javascript','src':'path to js file'})); 
0

Algunas soluciones biblioteca

Dojo:dojo.require("my.package.name");

jQuery:$.getScript("url/to/script.js", function() { /* callback */ });

Cuestiones relacionadas