2011-01-24 14 views
6

Làm cách nào để có thể lấy tay của tôi trên root_path của dự án trong tệp application.js của tôi?Rails root_path trong application.js

Tôi cần nó cho plugin js (codemirror) cần tải các tệp JS khác. Đó là tất cả tốt và dandy nếu tôi nói "/javascripts/needed_file.js", nhưng nếu tôi triển khai dự án của tôi để "/ tùy chỉnh".

Mã cần thực hiện phép thuật trên toàn bộ dự án và tôi muốn nó là UJS, vì vậy nó cần phải nằm trong tệp JavaScript tĩnh.

Bất kỳ giải pháp/hack đơn giản nào?

Trả lời

6

Không có giải pháp đẹp. Tôi muốn thử một trong các cách tiếp cận sau:

  • Kiểm tra window.location.pathname. Xác định từ điều này cho dù chạy từ gốc hoặc từ một url tiền tố.

  • Thêm thứ gì đó như <script type="text/javascript" charset="utf-8">var ROOT_PATH = '<%= Rails.root_path %>';</script> vào đâu đó ở đầu tệp bố cục của bạn.

  • Sử dụng chức năng này khá hackish (tôi nghi ngờ rằng nó có thể phá vỡ với một số kịch bản HTML5 thuộc tính):

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

tôi thực sự có liên kết đến trang chủ trong trang web của mình ... vì vậy nó dễ dàng như $ ('# tiêu đề a'). Attr ('href'). Stil khá hackish nhưng nó hoạt động nên tôi không thể phàn nàn .. cảm ơn bạn – alexcepoi

+0

Phương pháp '

1

Tôi có điều này trong tập tin tiêu đề của tôi.

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

Đó thực sự là một giải pháp tốt đẹp cảm ơn. – Abram

0

Vâng, cách tốt nhất tôi thấy là để tận dụng sức mạnh của JS để làm như vậy, như:

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

Nó sẽ cung cấp cho bạn tên máy hoàn chỉnh, với http://, và số cổng. Giống như trong trường hợp chạy Rails máy chủ cục bộ, nó sẽ cung cấp cho bạn: http://localhost:3000

window.location.hostname # localhost 

Nó chỉ sẽ cung cấp cho bạn tên của máy chủ, và không có gì về cảng hoặc HTTP. Khi máy chủ Rails chạy cục bộ, máy chủ sẽ cung cấp cho bạn: localhost.