【问题标题】:jQuery + Ajax + Haml. js.erb files not firingjQuery + Ajax + Haml。 js.erb 文件未触发
【发布时间】:2011-03-25 15:38:40
【问题描述】:

在阅读了一些经验之后,我觉得这个问题可能需要再次提出。在 Rails3 中编码,当用户尝试在我的应用程序的另一个元素上创建帖子时,我试图实现一些平滑的 Ajax 效果。这是我关心的代码:

app/views/posts/new.html.haml

- form_for @post, :remote=>true do |f|
    = f.text_area :content
    = submit_tag "Post"

app/controllers/post_controller.rb

def create
  @comment = Post.new(params[:post])
  @comment.save
end

app/views/posts/create.js.erb:

alert("ajax worked!");

我已经关注了我在UJS Railscast 上看到的内容,但似乎没有任何反应。不仅如此,萤火虫也没有给我任何关于正在发生的事情的描述性证据。它告诉我它在提交时创建了新的 post 对象,但没有进一步的。

有什么想法吗?

【问题讨论】:

    标签: jquery ajax ruby-on-rails-3 haml


    【解决方案1】:

    我找到了答案!问题是当控制器渲染视图时,它包含了我的应用程序的整体布局;布局屈服于渲染动作,所以我的 .js.erb 文件中包含的 javascript 代码被吐出到我的 application.rhtml 中。我通过在我的控制器操作中包含这个来显示我的帖子来解决这个问题:

    respond_to do |format|
      format.js {render :layout=>false}
    end
    

    【讨论】:

    • 我遇到了同样的问题 (stackoverflow.com/q/2738361/328998),我认为 render :layout=>false 技巧是一种临时解决方案……它不应该渲染嵌入布局中的 .js 文件,这没有意义……
    • 这对我来说也没有意义。我尝试了您列出的方法(告诉 rails 呈现 MIME 类型),但它对我不起作用;它仍然想将我的 js.erb 内容吐出到指定控制器的布局中。
    • 阅读这个答案是几个小时的挫折。这不是我问题的答案,但它让我在正确的时间找到了正确的地方。非常感谢。
    【解决方案2】:

    Watch a Railscast

    <%= form_tag products_path, :method => 'get', :id => ↵  
      "products_search" do %>  
      <%= hidden_field_tag :direction, params[:direction] %>  
      <%= hidden_field_tag :sort, params[:sort] %>  
      <p>  
        <%= text_field_tag :search, params[:search] %>  
        <%= submit_tag "Search", :name => nil %>  
      </p>  
    <% end %>
    

    在 Js 中

    // Search form.  
      $('#products_search').submit(function () {  
        $.get(this.action, $(this).serialize(), null, 'script');  
        return false;  
      });  
    });
    

    【讨论】:

      【解决方案3】:

      当我的布局在 Haml (application.haml) 中编码时,AJAX 不会触发,并且提到的解决方法代码 kelly.dunn 也不起作用。

      respond_to do |format|
        format.js {render :layout=>false}
      end
      

      最简单的解决方法是将应用程序布局转换为 .html.erb 格式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-28
        • 2012-07-17
        • 1970-01-01
        相关资源
        最近更新 更多