Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:它实际上是什么意思;呈现一个模板";_Ruby On Rails_Model View Controller - Fatal编程技术网

Ruby on rails Rails:它实际上是什么意思;呈现一个模板";

Ruby on rails Rails:它实际上是什么意思;呈现一个模板";,ruby-on-rails,model-view-controller,Ruby On Rails,Model View Controller,我对“呈现”一个“模板”的想法感到有点困惑,因为我正在读一本书,一位作者在书中谈到它的方式 我最初对“呈现模板”的理解是,它意味着Rails提供了在屏幕上查看/呈现给观众的内容(以呈现部分内容的方式),但我正在阅读的这本书似乎使用了“呈现模板”的概念来表示其他内容。让我解释一下上下文 这本书(rails 3正在运行)使用传统的layouts/application.html.erb文件设置页面布局,然后它“屈服”到不同的视图页面,例如views/tickets/show.html.erb,从而为

我对“呈现”一个“模板”的想法感到有点困惑,因为我正在读一本书,一位作者在书中谈到它的方式

我最初对“呈现模板”的理解是,它意味着Rails提供了在屏幕上查看/呈现给观众的内容(以呈现部分内容的方式),但我正在阅读的这本书似乎使用了“呈现模板”的概念来表示其他内容。让我解释一下上下文

这本书(rails 3正在运行)使用传统的
layouts/application.html.erb
文件设置页面布局,然后它“屈服”到不同的视图页面,例如
views/tickets/show.html.erb
,从而为屏幕添加更多内容。那很简单

在这个视图
views/tickets/show.html.erb
中,有一个部分的呈现(这也是一个简单的概念)

在这个删除操作的末尾,作者最初包括了
render:nothing=>true
,但后来他修改了这个操作,因为正如他所说的,“你要让它呈现一个模板。”这就是我感到困惑的地方

他得到这个动作来呈现的模板是“remove.js.erb”,里面只有一行jquery,其目的是从页面中移除“标记”(即用户在屏幕上看到的标记),因为它已经与数据库中的票证解除关联

$('#tag-<%= @tag.name.parameterize %>').remove();
$(“#标记-”).remove();
当我阅读“呈现模板”时,我希望应用程序将内容插入页面,但控制器中的“删除”操作呈现的模板只调用从页面中删除一个元素的jquery函数


如果“呈现”了一个“模板”,我希望删除另一个模板(以便为新模板腾出空间),或者我希望内容以呈现局部的方式“呈现”。在这个问题中使用jquery的情况下,当“呈现”一个“模板”时,您能澄清实际发生了什么吗?它是否真的将一个新页面放在用户面前(我希望呈现某种物理页面)

我的理解是,
js.erb
是通过执行其中的javascript函数来“呈现”的。通常会执行以下操作:

jQuery(document).ready(function() {
    jQuery('#element').html('<%= escape_javascript(render pages/content) %>');
});
jQuery(文档).ready(函数(){
jQuery('#element').html('');
});

这里有一个关于渲染的非常简洁的概述,这可能会有所帮助,因为它还详细介绍了
ActionController::Base#render
方法以及使用
render:nothing
时在幕后发生的事情(例如)。渲染,但也可以用于文件或内联代码——而不仅仅是传统意义上的“模板”

你就快到了!呈现模板确实总是关于生成内容,但要对内容进行更广泛的描述。它可能是一块html,例如,获取新项目的ajax调用可能会生成一些描述新项目的html,但不一定非得如此

模板可能会像在第二个示例中一样生成javascript。就我个人而言,我试图避免这种情况,而是将JSON传递回客户端,让客户端js执行所需的工作

您可能执行的另一种呈现类型是生成一些JSON。API通常会这样做,但您也可以在普通页面上这样做。例如,您可以呈现json,而不是呈现一些javascript来删除标记x

{ to_delete: "tag-123"}
然后让jQuery成功回调使用该负载,通过在application.js文件中包含该元素来知道要从DOM中删除哪个元素

$('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模板来实现这一点(我无法想象为什么)。

谢谢,所以在这个函数中,页面/内容被放在html元素中?是的,事实上你可以通过这种方式呈现通常由html.erb呈现的内容。我查看了该页面,特别是2.2.10,它给出了直接从控制器操作呈现js的说明,如render=>“alert('Hello Rails');”因此,为了尝试,我将jquery从模板remove.js.erb向上移动到控制器中,如2.2.10所述,但当我单击元素时,我需要刷新页面以进行移除。如果我在remove.js.erb中有jquery,它实际上会删除元素,而不需要刷新页面。相似但不同。这很有趣。你能澄清一下吗。我没有使用模板,而是尝试呈现:js=>“$('#tag-')。remove();”。这是可行的,但需要页面刷新才能删除标记,但如果我将此jquery放入模板中,则不需要页面刷新才能删除标记。当您编写“让jQuery成功回调使用该负载来知道要从DOM中删除哪个元素”时,这是否允许我使用render:js而不必刷新页面?你能解释/演示一下怎么做吗?提前谢谢你。我怀疑如果你渲染js,它需要的是普通的ruby风格的插值(#{}),而不是erb标记
{ to_delete: "tag-123"}
$('a.delete_tag').live('ajax:success', function(data){
  var selector = '#' + data.to_delete;
  $(selector).remove()
}
render :json => {:to_delete => "tag-#{@tag.name.parameterize}"}