zoukankan      html  css  js  c++  java
  • Rails Partial View之局部变量 :locals (转)

     来自 http://xixilive.blog.163.com/blog/static/551796902011424112029285/
     
    在使用PartialView时,经常需要向PV传递参数,主要通过三种方式,实例变量,:object以及:locals
    使用ActionView的render方法来渲染Partial View时,可以不显示指定:partial symbol,如:
    render 'some_partial_view'
    此时,Partial View能被正确渲染,但是用这种方式传递:locals时,在Partial View中是找不到所期望传递的参数的。
    错误的做法:
    render 'some_partial_view', :locals => {:my_var => Value_of_var}
    正确的做法:
    render :partial => 'some_partial_view', :locals => {:my_var => Value_of_var}
     
    从Rails源码分析(action_view/render/rendering.rb):
    def render(options = {}, locals = {}, &block)
          case options
          when Hash
            if block_given?
              _render_partial(options.merge(:partial => options.delete(:layout)), &block)
            elsif options.key?(:partial)    #提供:partial symbol时的情况--------------------(A)
              _render_partial(options)    
            else
              template = _determine_template(options)
              lookup_context.freeze_formats(template.formats, true)
              _render_template(template, options[:layout], options)
            end
          when :update
            update_page(&block)
          else  #未提供:partial symbol时的情况------------------------(B)
            _render_partial(:partial => options, :locals => locals)
          end
    end
     
    很容易看出:
    render 'some_partial_view', :locals => {:my_var => Value_of_var}
    的写法被按照源码中标记的B情况处理,所以在这种写法时,通过调试函数 <%= debug self %> 输出,可以看到有这样一个变量:
    :locals => { :locals => {:my_var => Value_of_var } }
     
    其他两种传参情况也一样,不能在调用render方法时省略 :partial symbol.
  • 相关阅读:
    IOS GCD使用实例大全
    IOS GCD图片数据异步下载,下载完成后合成显示
    Git使用详细教程
    maven是干什么的?
    npm 的作用
    webstorm+nodejs环境中安装淘宝镜像
    关于框架搭建-web
    ES6-babel转码
    JavaScript单元测试工具-Jest
    webpack-dev-server和webpack
  • 原文地址:https://www.cnblogs.com/wws19125/p/3060561.html
Copyright © 2011-2022 走看看