好吧,我以为我知道我在做什么,结果却被互联网上大量相互冲突的资源搞得不知所措。
我有一个rails 3应用程序。我想把prototype从这个应用程序中完全拿出来,只使用jQuery。其中一些代码位于rjs文件中,但大部分位于项目控制器中的format.js{}方法中。
我找到了this railscast,这使得我看起来可以对任何给定的操作执行以下操作:
def action_name
#do stuff
respond_to do |format|
format.js
#format other types
end
end
然后将我想要执行的jquery代码放在一个名为action_name.js.erb的文件中。
但是在从我的应用程序中删除prototype之后,我尝试这样做(将我的rails.js文件更改为jquery,并且在我的页眉中不包括prototype.js ),我得到了这个错误:
RJS error:
TypeError: $ is not a function
为什么它试图调用rjs,却无法识别我的jquery?我是否应该使用rjs模板而不是.js.erb文件?我以为我从应用程序中删除了prototype --是不是漏掉了什么?
最重要的是,有没有一种明确的方法来完成从Prototype到jQuery的转换,并且到2011年2月为止,Rails 3的转换是最新的?我对最好的方法以及我应该使用什么(rjs文件或js.erb文件)感到困惑。
非常感谢,如果需要,我可以编辑更多的信息。
发布于 2011-03-15 11:02:07
对于Rails3,就像您所做的那样:在开发环境中安装足够的非侵入性jquery适配器,因为这只用于安装和删除js文件。
gem "jquery-rails"
然后在bundlde安装之后运行
bundlde install
rails generate jquery:install #--ui to enable jQuery UI --version to install specific version of JQuery (default is 1.5)
这会处理那些低调地挂接到html5标记上的jquery代码,比如远程ajax请求或远程提交。
为了使用rjs,应该重新定义默认的原型帮助器以发出jquery代码来实现这一点,使用jrails gem
gem 'jrails', :git => 'https://github.com/theworkinggroup/jrails.git'
这会处理旧的原型函数,如观察表单、dom插入和替换方法等。
这样你就可以继续使用你的rjs temlates或者使用render :update来编写内联js。
可能是由于rjs的局限性(复杂的js仍然应该作为字符串写入页面resopnse),人们更喜欢js.erb,尽管它是地球上最丑陋的两种代码格式。
发布于 2011-02-11 03:12:00
你有没有看到:
https://github.com/rails/jquery-ujs
js.erb
文件应该包含如下内容:
<% if true? %>
$("#comment-notice").html('<div class="flash notice"><%= escape_javascript(flash.delete(:notice)) %></div>');
<% end %>
你最好删除所有的.rjs
扩展
https://stackoverflow.com/questions/4961438
复制相似问题