2011-12-11 24 views
5

Đây là mặc định application.js:Cách tải nội dung Javascript tùy thuộc vào bộ điều khiển/tác vụ?

//= require jquery 
//= require jquery_ujs 
//= require_tree . 

CoffeeScript mẫu có nội dung này:

# Place all the behaviors and hooks related to the matching controller here. 
# All this logic will automatically be available in application.js. 
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ 

Đối với tôi, "liên quan đến việc điều khiển phù hợp ở đây" có nghĩa là foo_bar.js.coffee CHỈ nên tải khi sử dụng bộ điều khiển foo_bar. Tôi có đúng không?

Thing là nó tải tất cả các tệp Javascript ngay cả khi chúng không cần thiết. Ngoài ra ... Tôi muốn biết làm thế nào để có điều kiện bao gồm các tập tin Javascript tùy thuộc vào hành động của bộ điều khiển.

Trả lời

12

Một vài cách để làm điều này, cách dễ nhất và thanh lịch nhất tôi đã tìm thấy được này:

Tháo Chỉ

//= require_tree . 

, và thay đổi templ của bạn ate to

<%= javascript_include_tag "application", controller_name %> 

Sau đó tải js toàn cầu của bạn vào ứng dụng và bộ điều khiển cụ thể trong controller_name.

Ví dụ: nếu bạn đang ở trong posts_controller, bạn sẽ tải được posts.js hoặc posts.js.coffee.

EDIT

Để làm hành động, bạn cũng có thể thêm

action_name 

đến giải pháp đề xuất của tôi. Một điều bạn có thể xem xét, là phá vỡ nó ra vào application_controller.rb:

before_filter :your_function 

def your_function 
    @controller = controller_name 
    @action = action_name 
end 

Sau đó, sử dụng nó như thế này trong cách bố trí của bạn

<%= javascript_include_tag "application", "#@controller.#@action" %> 
+1

+1 Tôi đồng ý. Đó là một giải pháp tốt và mô-đun – lucapette

+2

Thật tuyệt, đây là cách bộ xương được tạo nên được thực hiện. Điều gì về hành động? Ý tôi là ... Tôi muốn tải một JavaScript chỉ cho một hành động cụ thể ... là nó cũng có thể làm một cách dễ dàng? – Cristian

3

Chỉ thị require_tree trong số application.js tải tất cả các tệp js và cà phê được tìm thấy trong cây nội dung của bạn. Nếu bạn xóa nó, nó sẽ chỉ tải các tập tin được chỉ định.

Đối với tôi, "liên quan đến bộ điều khiển phù hợp ở đây" có nghĩa là foo_bar.js.coffee CHỈ nên được tải khi bộ điều khiển foo_bar được sử dụng. Tôi có đúng không?

Không, tệp được tải như được chỉ định qua chỉ thị "yêu cầu".

Ngoài ra ... Tôi muốn biết cách điều kiện bao gồm các tệp Javascript tùy thuộc vào hành động của bộ điều khiển.

Tạo một file foo_bar.js cho mỗi bộ điều khiển, trong mỗi yêu cầu các file khác khi cần thiết, và có điều kiện đưa vào bố trí của bạn

# some_layout.erb 
<%= javascript_include_tag params[:controller] %> 
Các vấn đề liên quan