`

关于Render在不同情况的用法

阅读更多
render是一个个人比较喜欢工具,先列一些常用的吧

render :action => "long_goal", :layout => "spectacular"
render :partial => "person", :locals => { :name => "david" }
render :template => "weblog/show", :locals => {:customer => Customer.new}
render :file => "c:/path/to/some/template.erb", :layout => true, :status => 404
render :text => "Hi there!", :layout => "special"
render :text => proc { |response, output| output.write("Hello from code!") }
render :xml => {:name => "David"}.to_xml
render :json => {:name => "David"}.to_json, :callback => 'show'
render :inline => "<%= 'hello ' + name %>", :locals => { :name => "david" }
render :js => "alert('hello')"
render :xml => post.to_xml, :status => :created, :location => post_url(post)


放到这里,用的时候好找,呵呵

Renders the content that will be returned to the browser as the response body.
Rendering an action

Action rendering is the most common form and the type used automatically by Action Controller when nothing else is specified. By default, actions are rendered within the current layout (if one exists).

  # Renders the template for the action "goal" within the current controller
  render :action => "goal"

  # Renders the template for the action "short_goal" within the current controller,
  # but without the current active layout
  render :action => "short_goal", :layout => false

  # Renders the template for the action "long_goal" within the current controller,
  # but with a custom layout
  render :action => "long_goal", :layout => "spectacular"

Rendering partials

Partial rendering in a controller is most commonly used together with Ajax calls that only update one or a few elements on a page without reloading. Rendering of partials from the controller makes it possible to use the same partial template in both the full-page rendering (by calling it from within the template) and when sub-page updates happen (from the controller action responding to Ajax calls). By default, the current layout is not used.

  # Renders the same partial with a local variable.
  render :partial => "person", :locals => { :name => "david" }

  # Renders the partial, making @new_person available through
  # the local variable 'person'
  render :partial => "person", :object => @new_person

  # Renders a collection of the same partial by making each element
  # of @winners available through the local variable "person" as it
  # builds the complete response.
  render :partial => "person", :collection => @winners

  # Renders a collection of partials but with a custom local variable name
  render :partial => "admin_person", :collection => @winners, :as => :person

  # Renders the same collection of partials, but also renders the
  # person_divider partial between each person partial.
  render :partial => "person", :collection => @winners, :spacer_template => "person_divider"

  # Renders a collection of partials located in a view subfolder
  # outside of our current controller.  In this example we will be
  # rendering app/views/shared/_note.r(html|xml)  Inside the partial
  # each element of @new_notes is available as the local var "note".
  render :partial => "shared/note", :collection => @new_notes

  # Renders the partial with a status code of 500 (internal error).
  render :partial => "broken", :status => 500

Note that the partial filename must also be a valid Ruby variable name, so e.g. 2005 and register-user are invalid.
Automatic etagging

Rendering will automatically insert the etag header on 200 OK responses. The etag is calculated using MD5 of the response body. If a request comes in that has a matching etag, the response will be changed to a 304 Not Modified and the response body will be set to an empty string. No etag header will be inserted if it‘s already set.
Rendering a template

Template rendering works just like action rendering except that it takes a path relative to the template root. The current layout is automatically applied.

  # Renders the template located in [TEMPLATE_ROOT]/weblog/show.r(html|xml) (in Rails, app/views/weblog/show.erb)
  render :template => "weblog/show"

  # Renders the template with a local variable
  render :template => "weblog/show", :locals => {:customer => Customer.new}

Rendering a file

File rendering works just like action rendering except that it takes a filesystem path. By default, the path is assumed to be absolute, and the current layout is not applied.

  # Renders the template located at the absolute filesystem path
  render :file => "/path/to/some/template.erb"
  render :file => "c:/path/to/some/template.erb"

  # Renders a template within the current layout, and with a 404 status code
  render :file => "/path/to/some/template.erb", :layout => true, :status => 404
  render :file => "c:/path/to/some/template.erb", :layout => true, :status => 404

Rendering text

Rendering of text is usually used for tests or for rendering prepared content, such as a cache. By default, text rendering is not done within the active layout.

  # Renders the clear text "hello world" with status code 200
  render :text => "hello world!"

  # Renders the clear text "Explosion!"  with status code 500
  render :text => "Explosion!", :status => 500

  # Renders the clear text "Hi there!" within the current active layout (if one exists)
  render :text => "Hi there!", :layout => true

  # Renders the clear text "Hi there!" within the layout
  # placed in "app/views/layouts/special.r(html|xml)"
  render :text => "Hi there!", :layout => "special"

Streaming data and/or controlling the page generation

The :text option can also accept a Proc object, which can be used to:

   1. stream on-the-fly generated data to the browser. Note that you should use the methods provided by ActionController::Steaming instead if you want to stream a buffer or a file.
   2. manually control the page generation. This should generally be avoided, as it violates the separation between code and content, and because almost everything that can be done with this method can also be done more cleanly using one of the other rendering methods, most notably templates.

Two arguments are passed to the proc, a response object and an output object. The response object is equivalent to the return value of the ActionController::Base#response method, and can be used to control various things in the HTTP response, such as setting the Content-Type header. The output object is an writable IO-like object, so one can call write and flush on it.

The following example demonstrates how one can stream a large amount of on-the-fly generated data to the browser:

  # Streams about 180 MB of generated data to the browser.
  render :text => proc { |response, output|
    10_000_000.times do |i|
      output.write("This is line #{i}\n")
      output.flush
    end
  }

Another example:

  # Renders "Hello from code!"
  render :text => proc { |response, output| output.write("Hello from code!") }

Rendering XML

Rendering XML sets the content type to application/xml.

  # Renders '<name>David</name>'
  render :xml => {:name => "David"}.to_xml

It‘s not necessary to call to_xml on the object you want to render, since render will automatically do that for you:

  # Also renders '<name>David</name>'
  render :xml => {:name => "David"}

Rendering JSON

Rendering JSON sets the content type to application/json and optionally wraps the JSON in a callback. It is expected that the response will be parsed (or eval‘d) for use as a data structure.

  # Renders '{"name": "David"}'
  render :json => {:name => "David"}.to_json

It‘s not necessary to call to_json on the object you want to render, since render will automatically do that for you:

  # Also renders '{"name": "David"}'
  render :json => {:name => "David"}

Sometimes the result isn‘t handled directly by a script (such as when the request comes from a SCRIPT tag), so the :callback option is provided for these cases.

  # Renders 'show({"name": "David"})'
  render :json => {:name => "David"}.to_json, :callback => 'show'

Rendering an inline template

Rendering of an inline template works as a cross between text and action rendering where the source for the template is supplied inline, like text, but its interpreted with ERb or Builder, like action. By default, ERb is used for rendering and the current layout is not used.

  # Renders "hello, hello, hello, again"
  render :inline => "<%= 'hello, ' * 3 + 'again' %>"

  # Renders "<p>Good seeing you!</p>" using Builder
  render :inline => "xml.p { 'Good seeing you!' }", :type => :builder

  # Renders "hello david"
  render :inline => "<%= 'hello ' + name %>", :locals => { :name => "david" }

Rendering inline JavaScriptGenerator page updates

In addition to rendering JavaScriptGenerator page updates with Ajax in RJS templates (see ActionView::Base for details), you can also pass the :update parameter to render, along with a block, to render page updates inline.

  render :update do |page|
    page.replace_html  'user_list', :partial => 'user', :collection => @users
    page.visual_effect :highlight, 'user_list'
  end

Rendering vanilla JavaScript

In addition to using RJS with render :update, you can also just render vanilla JavaScript with :js.

  # Renders "alert('hello')" and sets the mime type to text/javascript
  render :js => "alert('hello')"

Rendering with status and location headers

All renders take the :status and :location options and turn them into headers. They can even be used together:

  render :xml => post.to_xml, :status => :created, :location => post_url(post)

分享到:
评论
1 楼 fireflyman 2009-08-21  
基本全了,我收藏了.

相关推荐

    vue中render函数的使用详解

    但是,在特殊情况下,这种写死的模式无法满足需求,必须需要js的编程能力。此时,需要用render来创建HTML。 render方法的实质就是生成template模板; 通过调用一个方法来生成,而这个方法是通过render方法的参数...

    JsRender.zip(jsrender.js和jsrender.min.js合集)

    **使用方法** 要使用 JsRender,首先需要在页面中引入 `jsrender.js` 或 `jsrender.min.js` 文件。然后,你可以创建一个新的模板实例,如下所示: ```javascript var tmpl = $.templates("Hello, {{:name}}!"); ``...

    jquery-jsrender.js

    这个插件主要用于处理数据绑定和动态渲染,使得开发者能够在不刷新整个页面的情况下,更新网页的特定部分。 **JSRender** 是由 Microsoft 的 Dean Edwards 和 Boris Moore 开发的,它本身是一个独立的模板系统,但...

    Ruby的render_partial技术详解

    整理后的在Ruby on rails的Haml有关render_partial的用法,本资源为一张图

    RF_URP/RenderFeature_

    2. **RenderFeature生命周期**:掌握`OnEnable`,`OnDisable`,`OnExecute`等生命周期方法,知道在何时何地执行自定义的渲染逻辑。 3. **渲染队列管理**:理解如何通过`renderQueue`设置渲染顺序,以确保不同的特效...

    unity关于lineRender平滑画线问题_unity3d5.3.6源码.zip

    本资料“unity关于lineRender平滑画线问题_unity3d5.3.6源码.zip”提供了一个针对这个问题的解决方案,下面将详细解析这个问题以及源码中的处理方法。 1. LineRenderer组件介绍 LineRenderer是Unity内置的组件,它...

    vue props传入render函数,实现动态组件嵌套

    在Vue.js框架中,`props`是父组件向子组件传递数据的一种机制,而`render`函数则是Vue中用于自定义渲染逻辑的关键工具。本文将深入探讨如何利用`props`和`render`函数来实现组件之间的动态嵌套,从而提高应用的灵活...

    htmlrender

    "htmlrender"是一个基于C#开发的HTML渲染库,它主要功能是将HTML代码转换为高质量的图像或者PDF文档,适用于需要将网页内容保存或打印的情况。这个库提供了丰富的功能,能够确保渲染出的图像或文档与原网页内容保持...

    Vue中render函数的使用方法

    今天,我们将深入探讨 render 函数的使用方法,並探讨它在实际开发中的应用场景。 什么是 render 函数 在 Vue 中,render 函数是一个可选的函数,它可以在组件中使用,以生成 HTML 内容。render 函数的主要作用是...

    前端开源库-pure-render-decorator

    在这种情况下,你需要确保在组件内部使用`shouldComponentUpdate`生命周期方法,或者使用`immer`等库进行状态管理,以确保更精确的深比较。 此外,随着React的发展,`React.PureComponent`已经被引入,它提供了类似...

    对node.js中render和send的用法详解

    在大多数情况下,当我们需要向客户端返回HTML页面时,通常会使用res.render()方法。这个方法第一个参数是要渲染的视图模板文件名,第二个参数是一个对象,包含了模板中需要用到的数据。如果模板文件位于默认的views...

    前端项目-jsrender.zip

    JSRender是一个轻量级但功能强大的JavaScript模板引擎,它在前端项目中被广泛使用,特别是在构建动态Web应用时。这个压缩包“jsrender.zip”包含了JSRender的源码,这使得开发者可以深入了解其工作原理,并在自己的...

    python-render用法.docx

    Python Render库还支持更多的高级特性,如纹理映射(将图像应用到物体表面)、阴影(模拟光线投射的阴影效果)、后期处理(如模糊、色彩校正等)以及同时使用多个相机视图来捕捉不同角度的场景。为了充分利用Python ...

    前端开源库-v-render

    `v-render`是基于Node.js的,Node.js是一个建立在Chrome V8引擎上的JavaScript运行环境,它以其异步I/O和事件驱动的模型而闻名,非常适合处理大量并发连接,从而在服务器端提供了高性能的解决方案。结合JavaScript的...

    WPF渲染Render范例C#代码

    在这个方法中,你需要使用`DrawingContext`对象,它提供了一系列绘制基本形状、路径和图像的方法。例如: ```csharp protected override void OnRender(DrawingContext drawingContext) { drawingContext....

    RenderDoc_1.0_64.msi Unity渲染调试工具

    Unity中的Shader是实现复杂视觉效果的关键,而RenderDoc允许开发者在运行时检查和修改Shader代码,观察不同输入值对输出的影响。这对于调试Shader逻辑错误、优化Shader性能以及理解渲染流水线的工作方式非常有帮助。...

    jquery renderTo属性实现图片放大镜

    需要注意的是,不同的插件可能有不同的配置选项和使用方法,具体应参照插件的官方文档。在本例中,`ImgbigDemo`可能包含了这个示例的完整代码,包括HTML、CSS和JavaScript,你可以下载并参考其中的实现方式。 总之...

    使用fbo来实现render to texture演示

    在计算机图形学中,Framebuffer Object(FBO)是OpenGL中的一种技术,用于实现"Render to Texture"(RTT)。RTT允许我们不在屏幕上...通过熟练掌握这些概念和使用方法,开发者可以在3D场景中创造出更丰富的视觉体验。

    Laravel开发-laravel-pagerender

    接下来,我们探讨一下laravel-pagerender的使用方法。该库通常包含一系列的辅助函数和视图组件,帮助开发者快速构建页面树。例如,它可能提供一个`renderTree()`函数,用于接收一个包含页面ID和父ID的数据集,然后...

Global site tag (gtag.js) - Google Analytics