2016-03-05 23 views
5

Vì nhiều ngày tôi đã cố gắng để hiểu tại sao một liên kết đơn giản như thế này:Sự khác biệt giữa application.haml và application.html.haml?

link_to 'My Link', my_path(format: :js), remote: true 

luôn trở về tài liệu HTML đầy đủ thay vì thực hiện javascript nằm ở file.js.erb tôi:

alert('hello world') 

[...]

Sau giờ gỡ lỗi tôi thấy lý do tại sao:

Khi tôi đổi tên bố cục chính của tôi nộp như: application.haml nó ám đầy đủ tài liệu HTML:

Started GET "/my_path/2.js" for 127.0.0.1 at 2016-03-05 12:28:20 +0100 
Processing by MyController#show as JS 
    Rendered my_path/show.js.erb within layouts/application (0.1ms) 
    Rendered layouts/_sidebar.html.erb (18.9ms) 
    Rendered layouts/_headbar.haml (0.5ms) 
    Rendered layouts/_flash_messages.html.haml (0.2ms) 
    Rendered layouts/_footer.html.erb (0.1ms) 
Completed 200 OK in 102ms (Views: 59.3ms | ActiveRecord: 2.9ms) 

Khi tôi đổi tên file layout chính của tôi như: application.html.haml nó thực thi javascript đúng cách và chạy của tôi chào sổ popup thế giới:

Started GET "/my_path/8.js" for 127.0.0.1 at 2016-03-05 12:28:34 +0100 
Processing by MyController#show as JS 
    Rendered my_path/show.js.erb (0.1ms) 
Completed 200 OK in 24ms (Views: 21.8ms | ActiveRecord: 0.4ms) 

Tại sao có sự khác biệt trong hành vi javascript theo tên tệp khác nhau của bố cục của tôi?

+1

Đây không phải là hành vi javascript, đó là cách tìm kiếm mẫu cho đường ray. Đầu tiên, nó tìm kiếm các tệp '. ', sau đó cho '. '. Vì vậy, khi bạn có mẫu chung mà không có định dạng, nó sẽ được lấy cho tất cả các định dạng. – BroiSatse

+0

Nếu một trong các mẫu xem thiếu đối với một hành động, đường ray sẽ báo cáo lỗi cho biết cách tìm kiếm nó bao gồm đường dẫn, định dạng, v.v ... Với thông tin như vậy, bạn sẽ biết thứ tự tìm kiếm. – canoe

Trả lời

1

Như BroiSatse nói:

Đây không phải là hành vi javascript, nó là cách ray tìm kiếm mẫu. Đầu tiên, hãy tìm kiếm các tệp <action_name>.<templating-engine> , sau đó cho <action_name>.<format><templateing-engine>. Vì vậy, khi bạn có mẫu chung mà không có định dạng, mẫu sẽ được lấy cho tất cả các định dạng .

Các vấn đề liên quan