控制器在AJAX期间不呈现show.js.haml

问题描述 投票:0回答:1

我正在从from_tag(搜索框)进行简单的AJAX调用,并希望在没有刷新页面的情况下显示结果。问题是即使我可以在服务器控制台中看到show动作正在被处理为JS,它仍然呈现HTML而不是js.haml文件。我让控制器渲染js的唯一方法是将名称更改为show.js。它然后按预期工作。 show.js.erb也不起作用。我也尝试过format.js {render layout:false}而没有任何运气。这似乎是控制器方面的一个问题,但我可能在这里错了。任何想法赞赏!

编辑:

控制器操作正在使用渲染“show.js.haml”选项。另一个问题是escape_javascript在js.haml文件下面没有做任何事情。

show.js.haml

$("#main").html("#{escape_javascript(render 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");   

调节器

class ArtistsController < ApplicationController

        def index
            if params[:search]
                @artist=Artist.find_by(name: params[:search])
                redirect_to action: "show", id: @artist.id
            else
                @artists= Artist.all
            end
        end

        def show
            @artist= Artist.find(params[:id])
            @updates = @artist.updates.order(created_at: :desc)
            @reach = @artist.reachupdates.order(created_at: :desc)
            @reach_diff= Reachupdate.last_week_diff(@artist.id)

            respond_to do |format|
                format.html
                format.js {render "show.js.haml", layout: false}
            end
        end
    end
javascript ruby-on-rails ajax haml ujs
1个回答
0
投票

你需要将render layout: false改为render 'show.js.haml', layout: false

def show
  @artist= Artist.find(params[:id])
  @updates = @artist.updates.order(created_at: :desc)
  @reach = @artist.reachupdates.order(created_at: :desc)
  @reach_diff= Reachupdate.last_week_diff(@artist.id)

  respond_to do |format|
    format.html
    format.js {render 'show.js.haml', layout: false}
  end
end

更新:

我遇到的下一个问题是将ruby对象插入到js文件中

如果文件'articles/show'是一个部分文件,那么问题是locals关键字应该与partial关键字一起使用才能工作。尝试改变这个

$("#main").html("#{escape_javascript(render 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");

$("#main").html("#{escape_javascript(render partial: 'artists/show', locals: {artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff})}");

要么

只需删除locals

$("#main").html("#{escape_javascript(render 'artists/show', artist: @artist, updates, @updates, reach: @reach, reach_diff: @reach_diff)}");
© www.soinside.com 2019 - 2024. All rights reserved.