我对'#34;渲染"的想法感到有点困惑。一个"模板"由于作者在我正在阅读的书中谈论它的方式。
我对"渲染模板的初步理解"是因为它意味着Rails正在提供在屏幕上观看/呈现给观众的内容(以部分呈现的方式),但我阅读的书似乎正在使用&#34的概念;渲染模板"也意味着别的东西。让我在上下文中解释
本书(使用rails 3)使用传统的layouts/application.html.erb
文件设置页面布局,然后"产生"到不同的视图页面,例如views/tickets/show.html.erb
,它会向屏幕添加更多内容。这一切都很简单..
在这个视图views/tickets/show.html.erb
中,有一个局部渲染(这也是一个简单的概念)。
<div id='tags'><%= render @ticket.tags %></div>
现在在这个部分中,使用ajax,调用&#34;删除&#34; &#34; tags_controller.rb&#34;中的方法旨在允许授权用户删除&#34;标签&#34;来自&#34;票&#34;在我们的模拟项目管理应用程序
<% if can?(:tag, @ticket.project) || current_user.admin? %>
<%= link_to "x", remove_ticket_tag_path(@ticket, tag),
:remote => true,
:method => :delete,
:html => { :id => "delete-#{tag.name.parameterize}" } %>
<% end %>
现在这里是&#34;删除&#34;标签控制器中的操作(将标签与数据库中的标签解除关联)...
def remove
@ticket = Ticket.find(params[:ticket_id])
if can?(:tag, @ticket.project) || current_user.admin?
@tag = Tag.find(params[:id])
@ticket.tags -= [@tag]
@ticket.save
end
end
end
在此移除操作结束时,作者最初包含render :nothing => true
,但随后他修改了操作,因为正如他所说,&#34;您将获得它以呈现模板。 #34; 我感到困惑的地方
他获取此动作以呈现的模板是&#34; remove.js.erb&#34;,其中只有一行jquery,其目的是删除&#34;标记&#34;从页面(即用户在屏幕上看到的标签)现在已经与数据库中的票证取消关联。
$('#tag-<%= @tag.name.parameterize %>').remove();
当我阅读&#34;渲染模板&#34;我希望应用程序将内容插入到页面中,但是&#34; remove&#34;控制器中的操作只调用一个jquery函数,该函数从页面中删除一个元素。
如果是&#34;模板&#34;是&#34;渲染&#34;,我希望删除另一个模板(为了为新模板腾出空间),或者我期待内容被渲染&#34; ;以部分呈现的方式。你能澄清一下&#34;模板&#34;是&#34;呈现&#34;在这个问题中jquery的情况?它实际上是在用户面前放置一个新页面(我希望呈现某种物理页面)
答案 0 :(得分:3)
你快到了!渲染模板确实总是关于生成内容,但是对于内容的稍微更广泛的描述。它可能是一大块html,例如获取新项目的ajax调用可能会产生一些描述新项目的html,但它不一定是。
模板可能会像第二个示例中那样生成javascript。我个人试图避免这种情况,而是将JSON传递回客户端,让客户端js执行所需的工作。
您可能执行的另一种渲染方式是生成一些JSON。 API通常会这样做,但您也可以在普通页面上执行此操作。例如,您可以渲染json
,而不是渲染一些javascript来删除标记x{ to_delete: "tag-123"}
然后让你的jQuery成功回调使用该有效负载来知道从DOM中删除哪个元素,方法是将它放在application.js文件中
$('a.delete_tag').live('ajax:success', function(data){
var selector = '#' + data.to_delete;
$(selector).remove()
}
(假设你的删除链接有'delete_tag'类) 像这样渲染JSON根本不是一个模板,因为你通常是通过
来做到这一点render :json => {:to_delete => "tag-#{@tag.name.parameterize}"}
虽然我想你可以使用erb模板(我无法想象为什么)。
答案 1 :(得分:2)
我的理解是js.erb
通过执行其中的javascript函数来“渲染”。经常会出现类似下面的内容:
jQuery(document).ready(function() {
jQuery('#element').html('<%= escape_javascript(render pages/content) %>');
});
答案 2 :(得分:1)
有一个非常简洁的http://guides.rubyonrails.org/layouts_and_rendering.html渲染概述可能会有所帮助,因为它也会涉及ActionController::Base#render
方法的详细信息以及使用render :nothing
时幕后发生的事情(对于{{1}}例)。渲染但也可用于文件或内联代码 - 而不仅仅是传统意义上的“模板”。