Jquery ui Padrino远程js表单呈现为文本而不是js

Jquery ui Padrino远程js表单呈现为文本而不是js,jquery-ui,haml,padrino,Jquery Ui,Haml,Padrino,我正在学习将padrino与haml一起使用,在使用远程表单时,我会出现这种奇怪的行为。用于创建元素的部分代码就像一个符咒,但更新后使用的部分代码以明文呈现。我确信这是一个新手的错误,但我似乎找不到 #user.rb get :show, :with => :id do @user = User.get(params[:id].to_i) #REWRITE @posts = @user.posts session[:user_id] = @user.id r

我正在学习将padrino与haml一起使用,在使用远程表单时,我会出现这种奇怪的行为。用于创建元素的部分代码就像一个符咒,但更新后使用的部分代码以明文呈现。我确信这是一个新手的错误,但我似乎找不到

#user.rb
get :show, :with => :id do
    @user = User.get(params[:id].to_i) #REWRITE
    @posts = @user.posts
    session[:user_id] = @user.id
    render 'user/show'
end

#post.rb
  put :update, :with => :id, :provides => :js do
    @post = post.first(:id => params[:post][:id].to_i, :user_id => session[:user_id].to_i)
    @post.attributes(:name => params[:post][:name], :up => params[:post][:up], 
                      :down => params[:post][:down])
    if @post.save
      render 'post/update'
    end
  end

#show.haml
#show
  .user
    .title= link_to @user.login, url_for(:user, :show, :id => @user.id)
    .date= time_ago_in_words(@user.created || Time.now) + ' ago'
    .password= @user.password
  #posts= partial 'post/list', :locals => { :posts => @user.posts }

#_post.haml
.post{:id => "post#{post.id}"}
  .name= post.name
  .date= time_ago_in_words(post.created || Time.now) + ' ago'
  - if post.up
    .up + 
  - if post.down 
    .down -
  = link_to "(x)", url(:post, :destroy, :id => post.id, :format => :js, :method => 'delete'), :confirm => "Sure?", :remote => true
  = link_to "(e)", url(:post, :edit, :id => post.id, :format => :js), :remote => true

#_edit.haml
- form_for :post, url(:post, :update, :id => @post.id, :format => :js), :remote => true, :method => 'put', :id => 'post_edit_form' do |f|
  = partial 'post/form', :locals => {:f => f}
  = f.text_field :id, :hidden => true
  = f.submit "Edit", :class => 'button'

#update.js.haml
:plain
  alert("ok");
点击编辑按钮后,我会看到一个白色页面,上面写着:警告(“确定”);为什么update.js.haml页面没有呈现为远程js

WEBrick日志:

DEBUG -  TEMPLATE (0.0003s) /habit/update.js
DEBUG -       PUT (0.0170s) /habit/update/1.js - 200 OK

很抱歉让这些问题久拖不决

您遇到的问题是,
update.js.haml
指示haml将其呈现为纯文本,而不是在脚本标记中。这就是为什么浏览器永远不会运行它;您应该改为使用
:javascript
,如下所示:

#update.js.haml
:javascript
  alert("ok");
在任何情况下,大多数时候您都希望引用外部资产,即真实的JS文件。如果您需要在加载时引导那些具有一些数据的数据,您可以考虑其他方法,例如注入一个包含变量的脚本标记,该变量将设置初始数据并在应用程序中使用它(有不同的方法)。或者,您可以通过AJAX或WS加载该数据,请记住,这会创建到服务器的更多连接,并且可能会让用户等待,因此,如果数据需要在加载时准备好(例如,您正在构建SPA),那么这不是一个好方法