【问题标题】:where does render :partial html end uprender :partial html 在哪里结束
【发布时间】:2013-01-28 15:56:46
【问题描述】:

我有一个 ajax 表单的视图:

<%= form_tag( {:action => 'some_action'}, {:remote => true}) do %>
...
  <%= submit_tag "Submit" %>
<% end %>

现在,在目标动作中,我想显示一个部分

def some_action
  # some logic
  render :partial => "some_partial"
end

部分只是 html。 _some_partial.html.erb 可能是

<br>Hi, this is the partial</br> 

当我提交表单时,我看到浏览器中收到了 html 响应数据包(带有 firebug 的网络日志),但 html 没有显示在任何地方。 html应该在哪里?如何从动作中渲染部分 html 视图?

【问题讨论】:

    标签: ruby-on-rails ajax model-view-controller partial-views renderpartial


    【解决方案1】:

    您正在渲染部分内容,但未指定渲染位置。

    在 rails 2 你可以这样做:

    def some_action
      # some logic
      render :update do |page|
        page.replace_html 'some_div_id', :partial => 'some_partial'
      end
    end
    

    但在 rails 3 中,上述代码不再有效。 见Unobtrusive Javascript

    创建一个名为 some_action.js.erb 的文件并在其中编写代码:

    // update div with id some_div_id
    $("#some_div_id").html("<%= escape_javascript(render :partial => 'some_partial') %>");
    

    在控制器中

    def some_action
      # some logic
      respond_to do |format|
        format.js
      end
    end
    

    【讨论】:

    • 是的,我知道问题是我没有指定渲染它的位置。有没有办法在一个动作中使用 render :partial 来呈现一个 html 视图?也许通过某种方式来确定 html 应该去哪里?
    • 你可以在 some_action.js.erb 中指定 html 和其他 jquery 内容的渲染位置,这里 some_action 是你的动作名称。
    • 我知道这是一种解决方法。我的问题是是否有任何方法可以从动作中呈现 .html 部分。
    • 您可以从控制器渲染部分内容,但不能从控制器更新 html 元素。
    • 我猜您实际上可以发送一个 .html.erb 响应,但是您仍然需要一些 js 才能将其实际放置到位。看我的回答。
    【解决方案2】:

    我想出了如何发送和显示 html。从theReq,只需将:remote =&gt; true, "data-type" =&gt; "html"添加到表单中,然后在页面的javascript中,在ajaxSuccess上捕获返回的html即可显示:

    $('form#whatever').on('ajaxSuccess', function (event, data, status, xhr) {
        $('div#target').html(data);
      }
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      相关资源
      最近更新 更多