Rails Partial View之局部变量 :locals (转)
添加时间:2013-5-5 点击量:
来自 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.(: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 :
_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.
无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
来自 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.(: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 :
_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.