【发布时间】:2012-01-26 15:17:40
【问题描述】:
由于作者在我正在阅读的书中谈论它的方式,我对“渲染”“模板”的想法有些困惑。
我最初对“渲染模板”的理解是,它意味着 Rails 提供在屏幕上查看/呈现给查看者的内容(以呈现部分内容的方式)但我正在阅读的书似乎使用“渲染模板”的概念也意味着其他东西。让我在上下文中解释一下
这本书(rails 3 in action)使用传统的layouts/application.html.erb 文件设置页面布局,然后“让步”到不同的视图页面,例如views/tickets/show.html.erb 向屏幕添加更多内容。这很简单..
在这个视图views/tickets/show.html.erb 中,有一个局部渲染(这也是一个简单的概念)。
<div id='tags'><%= render @ticket.tags %></div>
现在在这个部分中,使用 ajax 调用“tags_controller.rb”中的“remove”方法,该方法旨在允许授权用户从我们的模拟项目中的“ticket”中删除“tag”管理应用。
<% 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 %>
现在这里是标签控制器中的“删除”操作(它将标签与数据库中的票证解除关联)...
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,但后来他修改了这个动作,因为正如他所说,“你会得到它来渲染一个模板。” 这就是我感到困惑的地方
他拿到这个action去渲染的模板是“remove.js.erb”,里面只有一行jquery,目的是把页面中的“标签”(即用户给的标签)去掉在屏幕上看到)现在它已与数据库中的票证解除关联。
$('#tag-<%= @tag.name.parameterize %>').remove();
当我阅读“渲染模板”时,我希望应用程序将内容插入页面,但控制器中的“删除”操作渲染的模板只调用了一个从页面中删除一个元素的 jquery 函数。
如果“模板”被“渲染”,我希望删除另一个模板(以便为新模板腾出空间),或者我希望内容以部分被渲染。您能否澄清在此问题中使用 jquery 的情况下“渲染”“模板”时实际发生了什么?它实际上是在用户面前放置一个新页面吗(我希望呈现某种物理页面)
【问题讨论】:
标签: ruby-on-rails model-view-controller