15

我正在尝试将 Froala 编辑器添加到我的项目中。

仅在生产服务器上出现问题(在本地主机上工作正常)我正在使用 rails 4.1.0 在 gemfile 我有

gem 'jquery-rails'

在我的资产/javascripts/application.js 中:

//= require jquery
//= require jquery_ujs
//= require foundation
//= require turbolinks
//= require_tree .
//= require modernizr
//= require froala_editor.min.js

在 new.html.erb 文件中:

<div class="row">
  <%= form_for :article do |f| %>
    <p>
        Title<br>
        <%= f.text_field :title %>
    </p>
    <p>
        Content<br>
    <%= f.text_area :text, :id=>'content' %>
    <p>
    <%= f.submit %>
    </p>
  <% end %>
</div>
<script>
  $(function() {
    $('div#content').editable({
      inlineMode: false
    })
  });
</script>

在 application.html.erb 中:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
    <title><%= content_for?(:title) ? yield(:title) : "foundation-rails" %></title>
    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
    <%= javascript_include_tag "vendor/modernizr" %>
    <%= javascript_include_tag "application" 'data-turbolinks-track' => true %>
    <%= csrf_meta_tags %>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

在这种情况下,结果是:

Uncaught ReferenceError: $ is not defined

如果我要添加一个字符串:

<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>

结果是:

Uncaught TypeError: undefined is not a function
4

7 回答 7

11

以下是我需要为 Rails 6 做的事情(确切地说是 6.0.3.4。)[发现于(所有功劳归于):https://www.botreetechnologies.com/blog/introducing-jquery-in-rails- 6-使用-webpacker]

  1. 将 jQuery 添加到环境中。 $ yarn add jquery

  2. 在 environment.js (<app_path>/config/webpack/environment.js) 中添加以下代码

     const webpack = require('webpack')
     environment.plugins.prepend('Provide',
     new webpack.ProvidePlugin({
         $: 'jquery/src/jquery',
         jQuery: 'jquery/src/jquery'
     })
     )
    
  3. 在 application.js 文件中需要 jquery。(/app/javascript/packs/application.js) require('jquery')

  4. (重新启动 rails 服务器以确保所有内容都已加载。)

于 2020-10-27T22:51:33.283 回答
10

这是我的解决方案:

把它放在你的 app/assets/javascripts/application.js

//= require jquery
//= require jquery_ujs

并安装此 gem 文件:

gem 'jquery-rails'
于 2018-08-21T17:56:29.300 回答
6

替换 application.html.erb

<%= javascript_include_tag "application" 'data-turbolinks-track' => true %>

<%= javascript_include_tag "application" %>
于 2015-08-02T17:34:25.037 回答
2

尝试切换这些行:

<%= javascript_include_tag "vendor/modernizr" %>
<%= javascript_include_tag "application" 'data-turbolinks-track' => true %>

会变成

<%= javascript_include_tag "application" 'data-turbolinks-track' => true %>
<%= javascript_include_tag "vendor/modernizr" %>
于 2015-06-11T13:34:23.523 回答
2

对我有用的解决方案是:

单独的文件

创建 assets/javascripts/jquery_init.js 内容:

//= require jquery
//= require jquery.turbolinks
//= require jquery.cookie
//= require jquery.ui.all
//= require jquery_ujs

aplication.js 之前的调用

<%= javascript_include_tag "jquery_init" %>
<%= javascript_include_tag "application", :async => !Rails.env.development?, "turbolinks-data-track" => true %>
于 2017-03-15T17:42:52.317 回答
2

您如何将基础添加到项目中?

app/assets/javascripts/aplication.js

我有同样的错误

$ 没有定义

我通过这种方式重新加载基础js来解决:

jQuery(document).ready(function($) {
$(document).foundation();
});
于 2016-01-22T12:37:07.513 回答
1

这是我所做的,它对我有用:

用包围你的脚本,window.onload = function () { };这样你的 js 只会在页面加载时执行:

window.onload = function () {
  $(function() {
    $('div#content').editable({
      inlineMode: false
    })
  });
};
于 2020-12-28T07:47:22.400 回答