【问题标题】:Is there an AJAX function that can just GET a rails partial?是否有一个 AJAX 函数可以只获取一个 rails 部分?
【发布时间】:2010-09-13 18:17:42
【问题描述】:

我的控制器由来自需要布局的搜索结果页面的链接和来自不需要布局的个人资料页面本身的链接共享。我想要完成的是一个单一的控制器方法show,它既能够通过 AJAX 从配置文件页面绘制部分,又能够从搜索结果中绘制部分和布局。

我最重要的限制是我不能将 dataType: 设置为 script 。它必须html 。所以我不能使用那个漂亮的 AJAX 脚本调用来渲染 JS 而没有控制器的 format.html 参与。

tabs_controller.js

def show
  @organization = Organization.find(params[:organization_id])
  @tab = @organization.tabs.find(params[:id])
  respond_to do |format|
    format.html { render :partial => 'tab', :layout => 'myHQpage' }
    format.js
  end
end

javascript

$.get($(this).attr('href'), null, null, "html");

show.html.haml

= render :partial => 'tab'

我可以在这里使用什么 AJAX 函数来绘制部分而不是整个布局?

【问题讨论】:

    标签: ruby-on-rails ajax controller


    【解决方案1】:

    我不确定是否真的理解,但这可能会对您有所帮助。 你可以在 format.js 块中添加一个:layout => false

    def show
      @organization = Organization.find(params[:organization_id])
      @tab = @organization.tabs.find(params[:id])
      respond_to do |format|
        format.html { render :partial => 'tab', :layout => 'myHQpage' }
        format.js { render :partial => 'tab', :layout => false }
      end
    end
    

    【讨论】:

    • 不起作用的原因。是我试图在ajax 中使用script 调用。所以 format.html 必须设置为false。但这两个查询都在使用它。哈,对不起,如果这令人困惑。我一直在重新编辑它以使其尽可能简单:)
    • 同样值得注意的是,当您将 AJAX 请求设置为脚本时,它会跳过布局参数。
    【解决方案2】:

    保留“脚本”数据类型设置,只需在搜索结果周围添加一个包装标签。然后使用 jQuery replaceWith 函数替换该标签的内容:

    _tag.html.erb:
    <div id="search">
      ...
    </div>
    
    show.js.erb:
    $('#search').replaceWith('<%= escape_javascript(render "tab") %>');
    

    【讨论】:

    • 就像我上面说的,我不能使用script,因为当我通过对用户生成的内容的 AJAX 调用传递脚本时,它会在 100 次调用中创建一个未终止的字符串错误。所以它必须在调用中是HTML。否则,没有问题。我最初得到了你的答案:D
    猜你喜欢
    • 2012-02-19
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多