2011-01-24 13 views
6

¿Cómo puedo ponerme manos a la obra root_path del proyecto en mi archivo application.js?Rails root_path en application.js

Lo necesito para un plugin js (codemirror) que necesita cargar otros archivos JS. Está todo bien si digo "/javascripts/needed_file.js", pero ¿qué ocurre si implemento mi proyecto en "/ custom"?

El código debe hacer su magia en todo el proyecto y me gustaría que fuera UJS, por lo que debe estar en un archivo javascript estático.

¿Alguna solución/simple hackeo?

Respuesta

6

No hay una solución hermosa. Intentaría uno de estos enfoques:

  • Inspeccionar window.location.pathname. Determine a partir de esto si se ejecuta desde la raíz o desde una URL de prefijo.

  • Agregue algo como <script type="text/javascript" charset="utf-8">var ROOT_PATH = '<%= Rails.root_path %>';</script> en algún lugar hasta la parte superior de su archivo de diseño.

  • Utilice esta función bastante hacker (sospecho que podría romper con algunos de los atributos del guión HTML 5):

    function urlOfCurrentFile() { 
        var scripts = document.getElementsByTagName("script"); 
        return scripts[scripts.length - 1].src; 
    } 
    
+0

De hecho, tengo un enlace a la página de inicio en mi sitio ... así que era tan fácil como $ ('# header a'). Attr ('href'). Todavía bastante hackish pero funciona así que no me puedo quejar ... gracias – alexcepoi

+0

El método '

1

tengo esto en mi archivo de cabecera.

<script type="text/javascript"> 
    var BASE_URL = '<%= root_url %>'; 
</script> 
+1

Eso es en realidad una buena solución, gracias. – Abram

0

Bueno, la mejor manera que encuentro es aprovechar el poder de JS para hacerlo, como:

window.location.origin # http://localhost:3000/ 

que va a darle el nombre de host completo, con http://, y el número de puerto. Al igual que en el caso de funcionamiento de servidor de rieles a nivel local, se le dará: http://localhost:3000

window.location.hostname # localhost 

apenas va a darle el nombre de anfitrión, y nada sobre el puerto o HTTP. El servidor Incase of Rails que se ejecuta localmente le dará: localhost.

Cuestiones relacionadas