2010-02-25 47 views
9

Estoy desarrollando una aplicación web usando CodeIgniter. Todo este tiempo, puse el código js personalizado para hacer cosas sofisticadas dentro del archivo de vista. Al hacer esto, puedo usar la función site_url() y base_url() proporcionada por CodeIgniter.jQuery en CodeIgniter, dentro de la vista o en un archivo js externo?

Hoy quiero separar todo el código de js personalizado del archivo de vista en un archivo js externo. Entonces me di cuenta, no puedo usar site_url() y base_url() en el archivo js externo. Entonces, tuve que mover el código js nuevamente al archivo de vista.

Quiero pedirle opinión, ejemplos y mejores prácticas para este tipo de problemas. ¿Pone el código js personalizado dentro de la vista, o en el archivo js externo? Si lo coloca en un archivo externo, ¿cómo se solucionan las necesidades de site_url() y base_url()? (Además de poner la url absoluta que quiero evitar).

Respuesta

38

Normalmente guardo el mío en un archivo externo, pero coloco una sola línea dentro de mi plantilla (vista) que declara una variable de javascript llamada "baseurl" que luego puede ser utilizada por mi javascript externo.

<script type="text/javascript"> 
    var baseurl = "<?php print base_url(); ?>"; 
</script> 
<script type="text/javascript" src="/js/scripts.js"></script> 

Ahora mi archivo scripts.js tiene acceso al valor base_url() a través de su propia baseurl variable.

+0

+1 para un gran truco que pasa 'base_url()' al archivo js externo. Ahora queda 'site_url()', tal vez pueda usar el mismo truco, almacenarlo en la variable js. –

+0

@Donny: lo haría :) – Sampson

+0

Sí, funciona. Mi código necesita hacer una solicitud AJAX a alguna URL diferente, así que guardo todas las URL requeridas en una variable: 'var url_1 =" "; Y así sucesivamente. –

0

Donny, si comienzas a pasar por cada URL por separado, te estarás dando dolor de cabeza. ¿Por qué no pasar a través de base_url() y controlar el controlador/método al final?

Se pierde la capacidad de cambiar las configuraciones de index_page y url_suffix, pero en realidad no deberían cambiar todo eso a menudo de todos modos.

+0

Phil, solo quiero asegurarme de que si cambio la configuración 'url_suffix' o' index_page', toda la url sigue funcionando. Es por eso que insistí en usar 'site_url()' con el nombre del controlador y el método + segmento uri requerido escrito como parámetro en lugar de solo concat. Divido el código js externo por módulo, y normalmente solo necesito 4 URL máx. Por módulo, por lo que almacenarlo en la variable global javascript es suficiente y funciona bien en mi caso. –

+0

Información adicional, para propósito propio, escribo toda la biblioteca requerida y el nombre de la variable como un comentario dentro del archivo js externo, así que al leerlo sabré qué biblioteca debe cargarse y qué variable debe inicializarse antes de cargar este archivo js. –

3

Lo haría de una manera diferente: js debería ser externo, obviamente, pero ¿por qué no aprovechar al máximo el hecho de que tienes un framework MVC que se adapta perfectamente para manejar toda tu magia javascript?

Aquí está mi receta para javscript (y CSS) bondad con CI:

  1. hacerse con una copia de Minify - si usted no lo sabe ya, que su vida será mejor. No en un "Amor a primera vista/Acabo de descubrir jQuery/xkcd/unit testing" tipo de manera, pero al menos en un "Amigo, las declaraciones preparadas erradican la inyección SQL" tipo de camino.

  2. En segundo lugar, crear un controlador IC que encapsula Minify (no debería ser demasiado difícil, sólo recuerda a establecer la cabecera HTTP correcta y pasar los parámetros en)

  3. activan Opcionalmente almacenamiento en caché para hacer que todo funcione extraordinariamente rápido (Minify tiene incorporado el almacenamiento en caché, pero si ya está almacenando en caché su contenido de CI, también podría usar el mismo método aquí.

  4. Opcionalmente definir algunos grupos de Minify, para que la carga de la escritura aún más agradable

  5. opcionalmente agregar las variables baseurl y SITEURL (y cualesquiera otros valores que pueda necesitar) a la salida Javascript

  6. Y listo , ahora debería ser capaz de cargar las secuencias de comandos llamando al Minify-envoltorio:

    <script type="text/javascript" src="/min/g=js"></script>

Es increíblemente rápido, tiene gzip, solo requiere una solicitud en lugar de muchas, le da control completo de CI sobre sus scripts e incluso hace que su código fuente sea más limpio.


Ah, y si quieres ser más agradable a sus visitantes asomando fuente de código, puede añadir automáticamente algo como esto a la salida:

// Javascript compressed using Minify by Ryan Grove and Steve Clay 
// (http://code.google.com/p/minify/) 
// Human-readable source files: 

// http://www.yourdomain.com/js/core_functions.js 
// http://www.yourdomain.com/js/interface.js 
// http://www.yourdomain.com/js/newsticker.js 
// http://www.yourdomain.com/js/more_magic.js 

(...) 

Al menos eso es lo que hago .

+0

Gracias por su sugerencia. Sí, estoy deseando hacer minify sobre la marcha, pero no tengo tiempo para hacerlo a tiempo. Podría implementar tu camino en mi próximo proyecto. –

+0

Realmente no es tan difícil, Minify hace toda la magia por ti. Si usa más de 5-6 scripts diferentes, valdrá la pena. Pero punto tomado, probablemente debería construirlo como una biblioteca de CI cortador de galletas. –

Cuestiones relacionadas