2013-05-25 53 views
6

Tôi đang làm việc với Rails 4 và muốn sử dụng đá quý Turbolink được tích hợp sẵn. Tôi hài lòng với tất cả ngoại trừ việc tôi muốn tải lại một trong các tệp js theo mọi yêu cầu của trang.Hiển thị lại tệp js cụ thể với turbolinks được bật

Nói cách khác, tôi muốn một tệp js cụ thể bỏ qua turbolinks, làm cách nào tôi có thể thực hiện việc này?

Trả lời

7

Bạn có thể sử dụng sự kiện 'page: load' từ turbolinks để kết nối chức năng khởi tạo với nó. Nó sẽ được gọi là luôn luôn khi turbolinks hoàn toàn reaload trang mới của bạn.

function initialize() { 
    //js code what you want run always 
} 

$(document).ready(initialize); 
$(document).on('page:load', initialize); 

Nếu bạn sử dụng jQuery rất nhiều, nó rất hữu ích để cài đặt trong Gemfile bạn

gem 'jquery-turbolinks' 

và application.js bạn

//= require jquery 
//= require jquery.turbolinks 

Turbolinks có hai sự kiện hữu ích khác:

page:fetch //when new page begin to download 
page:change //when the page has changed over 
+1

sự cố bạn phải ghi nhớ ở đây mặc dù mỗi khi nó tải, nó tải ngoài tập lệnh đã được tải. Vì vậy, nếu bạn đang ràng buộc các sự kiện trong kịch bản cho ex, họ sẽ bị ràng buộc hơn và hơn nữa. Vẫn đang tìm giải pháp tốt nhất để tránh điều này. – ifightcrime

+1

Tôi nghĩ rằng, những vấn đề này không tồn tại nữa với turbolinks mới nhất và jquery-turbolinks ... Bạn có thể thêm luôn một lớp bổ sung vào phần tử dom của bạn, có thể làm việc như một semafor để tránh nhiều giới hạn ... '$ (#yourselector: không (.bounded)). addClass ('bounded'). on ('một sự kiện', do_this); ' – Zoltan

+2

Đúng, chỉ muốn làm cho mọi người nhận thức được. Một cái gì đó mà dường như không được đề cập rất rộng rãi. Tôi đã viết một kịch bản nhanh tự động hủy bất kỳ sự kiện nào được thêm trước khi trang tiếp theo được tải. – ifightcrime