【问题标题】:Rails Render Action With Different FormatRails 以不同的格式渲染动作
【发布时间】:2011-09-26 07:16:36
【问题描述】:

假设我有一个 application#search 方法,我想响应 AJAX 请求。在我的 JS 视图 (app/views/application/search.js.erb) 中,我想渲染 HTML 视图:

$("#content").html( escape_javascript( render( :action => 'search', :format => 'html' ) ) );
$("#title").html( "Title" );

我知道我可以将内容移动到部分并在 HTML 和 JS 视图中呈现,但问题是我有许多不同的操作需要以这种方式响应,我不想创建一堆 1 - 仅呈现部分的行视图文件。

有什么方法可以显式地呈现具有特定格式的动作并同时获取 content_for 的不同部分?因此,对于上面的示例,我可以将 #title 设置为使用 content_for :title 或其他内容返回的 HTML。

【问题讨论】:

标签: ruby-on-rails ruby actionview


【解决方案1】:

我不确定将一堆 HTML 输出到 JS 源代码是一个很好的设计,但这不是你的问题——我不得不做类似的事情来将模板渲染的 HTML sn-ps 输出到 XML ,我认为这更合理:)。

无论如何,您的问题中有几件事。

它随着 Rails 的版本而变化,但在 Rails 4.x 中,我认为这应该可以工作,你很接近,但由于某种原因它需要:formats(复数)和数组。在您的示例中还有一些其他不相关的事情不正确,例如需要 ERB

var str = "<%= escape_javascript( render( :partial => 'partial_name', :formats => ['html'] ) ) %>";

我想。我自己还没有尝试过。

请注意,这仍然是部分内容。你想从另一个模板中渲染一个完整的(不是部分的)模板——我很确定 Rails 不会让你这样做。之前我也觉得有点烦。但实际上,即使要从 JS 部分渲染 HTML 部分(“something.html.erb”),您也需要使用 :formats =&gt; [] 技巧,否则 Rails 会坚持“嘿,我想找到一个 js 部分名称,我们处于 js 模式 man!”。

但如上所述应该从 JS 模板渲染 _partial_name.html.erb。这可能仍然不是一个伟大的设计。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 2018-05-10
    相关资源
    最近更新 更多