3

我正在尝试在 Rails 3.2.8 应用程序中使用 JQuery 插件。

相关代码如下...

/app/views/layouts/application.html.haml文件中:

!!!
%html
  %head
    = javascript_include_tag :defaults
    = javascript_include_tag '/assets/nospam.js'

/public/javascripts/application.js文件中:

//= require jquery
//= require jquery_ujs
//= require jquery.ui.all
//= require nospam

/app/assets/javascripts/nospam.js文件中:

$('#my-email').html(function(){
  var e = "me";
  var a = "@";
  var d = "mysite";
  var c = ".com";
  var h = 'mailto:' + e + a + d + c;
  $(this).parent('a').attr('href', h);
  return e + a + d + c;
});

/app/views/layouts/index.html.haml文件中:

%p
We love email, so why not send a message to
%a{:href => "#"}
  %span#my-email please enable javascript to view
and let us know what's on your mind.

Gemfile

gem 'jquery-rails'

group :assets do
  gem 'jquery-ui-rails'
end

我已经运行bundle install并重新启动了服务器,但插件无法正常工作,并且在 Chrome 的 Javascript 控制台中出现此错误:

GET http://localhost:3000/assets/nospam.js 404 (Not Found) 

rails console中,我得到:

Rails.application.config.assets.paths
 => ["/Users/steven/Dropbox/testivate/app/assets/javascripts", "/Users/steven/Dropbox/testivate/app/assets/stylesheets", "/Users/steven/Dropbox/testivate/vendor/assets/javascripts", "/Users/steven/.rvm/gems/ruby-1.9.3-p194/gems/jquery-rails-2.1.3/vendor/assets/javascripts"] 

我现在通过禁用资产管道来解决这个问题,但我知道出于性能原因我最终应该重新启用它。

我应该怎么做才能让它工作?

谢谢,

史蒂文。

4

2 回答 2

3

取出线:

/app/views/layouts/application.html.haml

= javascript_include_tag '/assets/nospam.js'

nospam.js 文件已经编译到 application.js 文件中,因此无需单独包含它。

此外,您需要确保您的 JQuery 代码在它引用的 html 之后执行,因此添加 $(document).ready 行,如下所示:

/app/assets/javascripts/

$(document).ready(function () {
  $('#my-email').html(function(){
    var e = "me";
    (etc...)
于 2012-10-15T15:17:19.387 回答
0

我猜:

资产管道将目录编译为app/assets目录public

由于您的application.js清单位于public/javascripts目录中,因此资产管道不考虑它(资产管道不会在公共目录中编译资产,它是放置已编译资产的地方)。所以把它移到app/assets/javascripts/application.js.

您在布局中需要的只是:

= javascript_include_tag :defaults

确保nospam.js位于app/assets/javascripts/nospam.js

app/
  assets/
    javascripts/
      application.js
      nospam.js

你的清单对我来说很合适。只是看起来文件不在正确的位置。

于 2012-10-15T15:42:24.750 回答