经过一些关于如何用jQuery替换Prototype的研究后,我最终得到了这个jquery-rails:
gem 'jquery-rails', '>= 1.0.3'
rails g jquery:install
rails s
我已经包含:defaults文件(jquery-rails应该替换它们)但是在实现AJAX登录脚本时我遇到了错误。创建会话和记录用户进展顺利,但代码会产生错误:
TypeError:对象函数Element(){ [本机代码]}没有方法'更新' Element.update(“sidebar”,“:partial => '布局/用户'“);
控制器:
sign_in user
respond_to do |format|
format.js {
render :update do |page|
page.replace_html 'sidebar' , ":partial => 'layouts/user'"
end
}
形式:
<nav id="sidebar">
<%= form_for :session, :url => sessions_path, :remote => true do |f| %>
<div>
<%= f.label :email %><br />
<%= f.text_field :email, :class => "span-4" %>
</div>
<div>
<%= f.label :password %><br />
<%= f.password_field :password, :class => "span-4" %>
</div>
<div>
<%= f.submit "Sign in" %>
</div>
<% end %>
</nav>
如果我没弄错的话,jquery-rails应该是Prototype的替代品。所以我猜我做错了什么?
编辑:
添加了侧边栏导航
答案 0 :(得分:6)
你必须创建一个名为XXX.js.erb的部分,删除名为XXX.js.jrs的部分(如果有的话),并在第一部分内部使用JQuery(主要是它的.html()方法),例如:
=&GT;控制器
respond_to do |format|
format.js { render :locals => { :foo => 'bar' } }
end
=&GT; js partial(XXX.js.erb)
$('#element')
.html("<%= "hello #{foo}" %> ");
答案 1 :(得分:5)
问题是page.replace_html
是原型函数。请参阅this question以供参考。 Unobtrusive Javascript是你最好的选择。