我正在尝试在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"]
我现在通过禁用资产管道来解决这个问题,但我知道我应该出于性能原因最终重新启用它。
我该怎么做才能让它发挥作用?
谢谢,
史蒂芬。
答案 0 :(得分:3)
取出界限:
<强> /app/views/layouts/application.html.haml 强>
= javascript_include_tag '/assets/nospam.js'
nospam.js文件已经编译到application.js文件中,因此不需要单独包含它。
此外,您需要确保您的JQuery代码在它引用的html之后执行,因此添加一个$(document).ready行,如下所示:
<强> /应用/资产/ Javascript角/ 强>
$(document).ready(function () {
$('#my-email').html(function(){
var e = "me";
(etc...)
答案 1 :(得分: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
你的清单对我来说是正确的。看起来文件不在正确的位置。