2011-02-28 24 views
7

Tengo algunos archivos ColdFusion que usan el mismo código JavaScript. Quiero separar el javascript en un archivo .js e incluirlo en cada uno de los archivos para no tener que repetir todo varias veces. Por lo tanto, me separé del código JavaScript en un archivo denominado "myPage.js", y en "myPage.cfm" He incluido una etiqueta de script -¿Cómo puedo incluir un archivo javascript externo que contenga el código ColdFusion?

<script language="javascript" src="myPage.js"></script> 

El problema es que hay algún código de ColdFusion se extendió entre el javascript que inyecta valores usando <cfoutput> sy demás, y eso ya no se traduce correctamente, probablemente porque está tratando de leerlo como javascript puro. ¿Hay alguna manera de que pueda tener un archivo js externo pero indicar que quiero que use coldfusion para interpretarlo también?

Una solución que he encontrado es colocar el javascript en un archivo coldfusion en lugar de un archivo javascript, llamado "myPageJavascript.cfm", rodear todo el código javascript en una etiqueta <script type="text/javascript">, y luego usar un cfinclude para incluir ese javascript en todas las páginas. Esto funciona bien, pero no me parece tan intuitivo como incluir un archivo js ... ¿Cuál es la práctica estándar para situaciones como esta? ¿Hay alguna forma de implementar esto como un archivo js externo, o debería simplemente adherirme a mi archivo de plantilla coldfusion?

Respuesta

8

Otras respuestas son más elegante y eficiente, pero el camino más fácil es cambiar la extensión del archivo de .js a .cfm como tal:

<script language="javascript" src="myPage.cfm?id=#createUuid()#"></script> 

El createUuid() está ahí para previene el almacenamiento en memoria caché, suponiendo que la salida del archivo diferirá, muy probablemente en función de las variables del ámbito session. El cliente carga esto como JavaScript, mientras que el servidor lo procesa como ColdFusion. Puedes hacer lo mismo con las hojas de estilo también.

Ahora, si tu JavaScript depende de los valores de la página de llamada puede pasar a lo largo de la URL:

<script language="javascript" src="myPage.cfm?name1=value1&name2=value2"></script> 

En esta situación, puede en realidad puede tomar ventaja de almacenamiento en caché cuando los mismos parámetros de URL se pasan.

En general, este enfoque puede ser mucho menos esfuerzo que el código de refactorización para mantener el archivo .js "puro", mientras que la salida de las variables depende de antemano en un bloque <script/>.

+2

Además, recomendaría incluir este encabezado en .cfm: '' – Sergii

+0

@Sergii: con '' Estoy de acuerdo en que es lo correcto, pero ¿cuál es la ventaja en este escenario? Supongo que el cliente siempre tratará algo referenciado de la etiqueta '

3

Sería más eficiente si moviera el código de ColdFusion al lugar de donde lo obtuvo, donde lo usaría para establecer algunas variables de JavaScript, y solo dejaría JavaScript puro que luego usaría esas variables en sus archivos JavaScript externos . Esta sería la solución más simple. Algo más avanzado sería definir funciones en sus archivos JavaScript externos que serían llamados desde sus etiquetas de script en su HTML generado por ColdFusion.

6

Sugiero que cree un bloque de scripts antes de incluir js, que contiene todas las variables que se utilizarán dentro del archivo js incluido. En su caso, mover esas variables cfoutput se pone dentro del archivo js en el fichero principal

<script type='text/javascript'> 
    var sourceName = <cfoutput>#Application.name#</cfoutput> 
    </script> 

    <script src="js/myPage.js" type="text/javascript"/> 

en los myPage.js archivo que puede utilizar el nomFuente variable que tiene el valor de la variable Actuall ColdFusion. lo que le ayuda a separar el código de coldfusion y el código js.

Si tiene que mover un montón de variables, considere crear una variable de tipo de objeto y agregar todas las variables dentro de ella.

NOTA: Agregar js con la etiqueta de script lo ayudará a almacenar en caché y aumentar el rendimiento de la página. Así que no cargue js archivo como archivo de pies cúbicos por minuto

+2

+1 para el enfoque más correcto. Dicho esto, creo que el cliente también almacenará en caché un archivo .cfm o cualquier extensión a la que se haga referencia desde el atributo 'src' de una etiqueta'

Cuestiones relacionadas