如何在 Haml 中包含外部 JavaScript 文件

How to include an external JavaScript file in Haml

我想使用外部 JavaScript 和 jQuery 文件动态添加样式和函数,但它不断抛出错误。

Ruby代码是:

# myapp.rb
require 'sinatra'
require 'sinatra/reloader'
require 'haml'

get '/' do
    @contacts = [
        {
            name: "Petit",
            class: "K1"
        }
    ]

    haml :index
end

get '/about-us' do
    haml :about
end

Haml 代码是:

!!!
%html
    %head
        = javascript_include_tag "actions"

    %body
        %h1#title.titles
            This is a page title

        %ul
            - @contacts.each do |contact|
                %li
                    = "#{contact[:name]}'s class is #{contact[:class]}"

        %a{ href: "/about-us"}
            About

这行似乎是问题所在:

= javascript_include_tag "actions"

错误是当我运行浏览器中的应用程序:

NoMethodError at /
undefined method `javascript_include_tag' for #<Sinatra::Application:"some hex address here">

没有那行代码,它 运行 没问题,嵌入的 JavaScript 也可以。我无法 link 外部 JavaScript 文件。

当您的目录如下所示时:

ruby-web/
| public/
|-| css/
|-|-| styles.css
|
|-| javascript/
|-|-| jquery-3.5.1.min.js
|-|-| actions.js
|
| views/
|-| index.haml
|-| about.haml
| my-app.rb

您的 Ruby 代码如下所示:

# myapp.rb
require 'sinatra'
require 'sinatra/reloader'
require 'haml'

get '/' do
    haml :index
end

get '/about-us' do
    haml :about
end

您的 index.haml 将成为连接到服务器时显示的根页面,因此您的 index.haml 代码应如下所示:

!!!
%html
    %head
        /Styles :
        %link{:href => "css/styles.css", :type => "text/css"}
        /Scripts :
        %script{:src => "javascript/jquery-3.5.1.min.js", :type => "text/javascript"}
        %script{:src => "javascript/actions.js", :type => "text/javascript"}

    %body
        %h1#title
            Equations

        %div#about
            %footer#footer
                %a{ href: "/about-us"}
                    About

注意 Haml 代码中的 %link%script 标记,并查看 :src:href 中给出的路径。

是:

:src => "javascript/actions.js"

:href => "css/styles.css" 

不是:

:src => "public/javascript/actions.js"

:href => "public/css/styles.css"

即使脚本和样式位于 public 文件夹中。

也不是:

:src => "../public/javascript/actions.js" 

:href => "../public/css/styles.css"

即使脚本和样式相对于 index.haml.

../public/javascript/../public/css/

现在您已经有了包含脚本和样式的 public 文件夹,您可以使用上述方法 link 将它们添加到它们。