2011-08-13 19 views
8

Tôi đã sử dụng cùng một chiến thuật trong số Mobile Devices railscast để cung cấp bố cục thay thế cho trang web của mình trong trình duyệt dành cho thiết bị di động.Sử dụng bố cục Rails thay thế, nhưng chế độ xem tương tự, trên thiết bị di động

Khi phát hiện trình duyệt trên điện thoại di động, request.format được đặt thành: mobile, mà tôi đã xác định là loại mime. Tôi đã tạo bố cục mới cho thiết bị di động. Nếu tôi cung cấp chế độ xem di động (ví dụ: show.mobile.haml), cả chế độ xem và bố cục trên thiết bị di động đều được sử dụng trên thiết bị di động và mọi thứ đều hoạt động tuyệt vời.

Vấn đề là, tôi không muốn tạo chế độ xem hoàn toàn mới, đó chỉ là bố cục tôi muốn thay đổi. Nếu tôi không tạo chế độ xem có tên phù hợp, bố cục di động sẽ không bao giờ được sử dụng. Vì vậy, như tôi chỉ có thể quản lý để thay đổi cả hai hoặc không trên thiết bị di động.

Tôi thiếu gì ở đây? Làm thế nào tôi có thể nhận được đường ray để hoán đổi chỉ bố cục khi tôi có người dùng di động?

Trả lời

18

Giả sử bạn đã thêm các phương pháp mobile_device? từ railscasts sau đó chỉ cần thêm dòng sau vào application_controller.rb:

layout :which_layout 
    def which_layout 
    mobile_device? ? 'mobile' : 'application' 
    end 

Hãy chắc chắn để tạo ra các tập tin mobile.html.erb trong app/views/layouts

Vì bạn muốn hiển thị cùng một chế độ xem, đừng lo lắng về việc đặt request.format.

+0

Cảm ơn, đó chính xác là những gì tôi đang tìm kiếm. – Kelly

4

Tôi luôn tìm thấy chuyển đổi định dạng được yêu cầu từ HTML sang thiết bị di động để chống lại quy ước. Nó hoàn toàn lạm dụng các công cụ, do đó, nó không có thắc mắc rằng bạn đang chạy vào các vấn đề cố gắng để ở lại DRY.

Thay vì chuyển đổi định dạng được yêu cầu, chỉ cần kiểm tra xem một yêu cầu cụ thể có từ thiết bị di động hay không và đặt bố cục dựa trên đó. Bing, bang, boom - done. Không dicking xung quanh với một cái gì đó không liên quan bởi vì ai đó đã làm, và bạn có thể trở lại làm việc.

Tôi muốn đăng mã, nhưng tybro0103 chỉ cần đánh tôi vào cú đấm bằng liên kết để khởi động. Ooooh aaaaah!

+1

+1 để giải thích nó tốt hơn tôi :) – tybro0103

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