用jquery-rails替换Prototype - replace_html会导致错误

Emi*_*äck 2 jquery ruby-on-rails ruby-on-rails-3

经过一些关于如何用jQuery替换Prototype的研究后,我最终得到了这个jquery-rails:

gem 'jquery-rails', '>= 1.0.3'
rails g jquery:install
rails s
Run Code Online (Sandbox Code Playgroud)

我已经包含了:defaults文件(jquery-rails应该替换它们)但是在实现AJAX登录脚本时我遇到了错误.创建会话和记录用户进展顺利,但代码会生成错误:

TypeError:对象函数Element(){[native code]}没有方法'update'Element.update("sidebar",":partial =>'layouts/user'");

控制器:

sign_in user
  respond_to do |format|
    format.js {
      render :update do |page|
        page.replace_html 'sidebar' , ":partial => 'layouts/user'"
      end 
    }
Run Code Online (Sandbox Code Playgroud)

形成:

<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>
Run Code Online (Sandbox Code Playgroud)

如果我没弄错的话,jquery-rails应该是Prototype的替代品.所以我猜我做错了什么?

编辑:
添加了侧边栏导航

yag*_*oar 6

你必须创建一个名为XXX.js.erb的部分,删除名为XXX.js.jrs的部分(如果有的话),并在第一个部分内部使用JQuery(主要是它的.html()方法),例如:

=>控制器

respond_to do |format|
  format.js { render :locals => { :foo => 'bar' } }
end
Run Code Online (Sandbox Code Playgroud)

=> js partial(XXX.js.erb)

$('#element')
 .html("<%= "hello #{foo}" %> ");
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 5

问题是这page.replace_html是一个原型功能.请参阅此问题以供参考.不引人注目的Javascript是你最好的选择.