2017-03-04 35 views
0

使用Sinatra作为网页框架和HAML作为页面,我有一个布局文件/views/layout.haml。我也有/public的JavaScript和css文件。在布局脚本和CSS的定义与此类似:布局路径在Sinatra中不起作用

%script{:type => "text/javascript", :src => "test.js"} 
%link{:rel => "stylesheet", :type => "text/css", :href => "test.css"} 

当我在末日的一切决定的基本路线正常工作:

get '/' do 
    haml :index 
end 

但当航线有多个部分,如'/route/1',突然间到test.jstest.css的路径不再有效。 haml文件正确加载,但布局中的路径不再有效。

试验一些,如果我改变的路径类似"//public/test.js",而不是仅仅"test.js"后,再次加载...但仅限于路线/route/1。不幸的是,第一条路线/不再加载。

这是如何通过这样的路线在Sinatra处理?

回答

1

你只需要确保你的网址是绝对的。

随着:src => "test.js",浏览器将相对于当前URL请求。因此,对于根目录/,请求将为/test.js,并且可以正常工作,但当前页面为/route/1时,请求将转至/route/test.js并且将失败。

直接的解决方法是只需添加/的网址,使路径绝对:

%script{:type => "text/javascript", :src => "/test.js"} 

一个更强大的解决方案是使用url helper

%script{:type => "text/javascript", :src => url("/test.js")} 

这将确保即使您的应用程序安装在您的Web服务器根目录以外的某个位置,您的应用程序也能正常工作