2012-09-09 24 views
8

Tôi đang sử dụng Sinatra và tôi đã cố gắng tải trong một số biểu định kiểu. Tôi đã thử chỉ cần thẻ html bình thường link trong erb của tôi, nhưng điều đó đã không làm việc.Tải Bản định kiểu trong Sinatra

ive đã cố gắng

<head> 
    <link href="style.css" rel="stylesheet" type="text/css" /> 
</head> 

Nó không phải là một vấn đề với các url Tôi đang sử dụng, có một số cách đặc biệt để đạt được điều này?

Trả lời

11

Khi bạn sử dụng href="style.css", bạn đang chỉ định liên kết tương đối với biểu định kiểu. Con đường thực tế mà trình duyệt của bạn sẽ yêu cầu sẽ phụ thuộc vào url của trang hiện tại, vì vậy ví dụ nếu bạn có một tuyến đường như:

get '/things/:id' do 
    #look up thing with id = :id 
    erb :my_view 
end 

sau đó trình duyệt sẽ tìm kiếm các stylesheet tại /things/style.css. Điều này rõ ràng sẽ không hoạt động nếu biểu định kiểu của bạn ở cấp cao nhất trong thư mục public của bạn.

Khắc phục nhanh là sử dụng đường dẫn tuyệt đối cho biểu định kiểu của bạn: href="/style.css" (lưu ý ký tự /). Điều này sẽ làm cho trình duyệt luôn tìm kiếm biểu định kiểu tại gốc của máy chủ.

Giả định rằng ứng dụng của bạn luôn được gắn ở gốc máy chủ của bạn và sẽ không thành công nếu bạn chạy nó trong thư mục con. Bạn muốn có thể nói "tìm kiếm bản định kiểu trong thư mục gốc của ứng dụng này, bất cứ nơi nào nó xảy ra". Tại Sinatra, bạn có thể làm điều này bằng cách sử dụng url helper method. Sử dụng ERB như ngôn ngữ mẫu của bạn này sẽ như thế nào:

<link href="<%= url('/style.css') %>" rel="stylesheet" type="text/css" /> 

Điều này sẽ đảm bảo tính liên kết đến style.css sẽ được chính xác bất cứ nơi nào ứng dụng của bạn có vị trí.

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