Ruby on Rails - JavaScript ReferenceError:myFunction未定义

时间:2016-04-02 16:57:21

标签: javascript jquery ruby-on-rails ruby ruby-on-rails-5

我正在使用Rails 4.2.6和Ruby 2.2.4p230。

我正在做Ruby on Rails 4 Essential Traning教程,所以我是Ruby on Rails的新手。

我在/ assets / javascripts文件夹中定义了一个简单的JavaScript函数。 加载应该调用该函数的页面时,它什么都不做。它应该显示警报。 我检查了JavaScript控制台并显示了ReferenceError:未定义jsRoar。

我在/ assets / javascripts中有一个名为public.js的清单文件,我需要demo.js文件:

//= require demo

和/ assets / javascripts中的demo.js文件定义了jsRoar函数:

function jsRoar(name) {
  alert('I am ' + name + '. Hear me roar!');
}

然后我在/views/layouts/application.html.erb中包含一个帮助器的清单文件:

<%= javascript_include_tag('public') %> 

最后我尝试使用

在/views/demo/index.html.erb文件中运行它
<%= link_to('Roar', '#', :onclick => "jsRoar('JavaScript'); return true;") %>

<%= javascript_tag("jsRoar('Rails');") %>

我尝试直接使用JavaScript,如

 <%= javascript_tag("alert('blah blah blah')") %> 

并且有效。

为什么JavaScript控制台说没有定义jsRoar?我的Rails版本可能有问题吗?本教程使用Rails 4.0.0。

@EDIT我的天哪,对不起,我写道我使用的是Rails 2.4.6而不是4.2.6

更多信息:

在控制台中我得到:

Started GET "/assets/demo.self-877aef30ae1b040ab8a3aba4e3e309a11d7f2612f44dde450b5c157aa5f95‌​c05.js?body=1" for ::1 at 20 16-04-02 20:00:50 +0200)
Started GET "/assets/public.self-1d8e221ce33ae6895c0dc108af782be06d67eee7ddcbbe39856d455f5c5‌​c4ce1.js?body=1" for ::1 at 2016-04-02 20:00:50 +0200

当我在开发模式的浏览器中检查demo.self - (...)。js的来源时,有:

(function() {


}).call(this);

在public.self - (...)。js我有:

// This is a manifest file that'll be compiled into application.js, which will include all the files 
// listed below. 
// (...)
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
// about supported directives.
//

并且没有// =需要演示

@EDIT 2

好的,我设置了一个新的应用程序并将所有这些文件放在那里,我收到了一个错误:

Sprockets::Rails::Helper::AssetNotPrecompiled in Demo#index 

 Showing c:/(...)/testing/app/views/layouts/application.html.erb where line #6 raised:

Asset was not declared to be precompiled in production.
Add `Rails.application.config.assets.precompile += %w( public.js )` to `config/initializers/assets.rb` and restart your server

我想我在原始应用中也遇到了这个错误。 当我添加资产声明时,JavaScript函数不像以前的应用程序那样工作。

@EDIT 3

我又回到了Rails,我仍然在 Rails 5 中遇到此问题。我发现另一件事就是demo.coffee中的东西正在转向JavaScript并且在网站上工作(曾经且只有当网站加载但我认为这是我后来会发现的涡轮问题)。我猜demo.js文件有问题。这就像那里的代码没有被处理到服务器中。我确实检查了网络控制台并且demo.self已加载到那里,但正如我所说的文件仍然只有这个

(function() {


}).call(this);

我到底做错了什么?这次我非常仔细地阅读了教程。

0 个答案:

没有答案