ruby-on-rails – 神秘的Ruby Block行为:&block vs. {block
发布时间:2020-12-17 02:28:04 所属栏目:百科 来源:网络整理
导读:当编写一个帮助打印可以从其他助手和视图中使用的 javascript时,我偶然发现了以下问题: def javascript(print_tag = false,block) content_for(:javascript) do if print_tag javascript_tag(block) # does not work javascript_tag { block.call } # does
当编写一个帮助打印可以从其他助手和视图中使用的
javascript时,我偶然发现了以下问题:
def javascript(print_tag = false,&block) content_for(:javascript) do if print_tag javascript_tag(&block) # does not work javascript_tag { block.call } # does work else capture(&block) end end end 应该使用javascript {“alert(‘hurray’);}来调用此帮助程序. 在第一个替代方案 – 我期望工作 – Rails javascript_tag helper渲染一个空的< script type =“text / javascript”> //<![CDATA [//]]> < /脚本>标签. 然而,第二种选择按预期工作. 那里发生了什么?怎么会有所不同? 解决方法
你说你在观点上这样做,对吗?
<%= javascript { "alert('hurray');" } %> 但是要使content_tag(& block)起作用,你应该以在视图中使用content_tag的方式调用javascript,这是: <% javascript do %> alert('hurray'); <% end %> content_tag的行为根据调用的位置而有所不同,请参阅函数block_called_from_erb?在源代码中.在第一种情况下,这个函数返回true,因为块确实来自erb(然后它是conced,你不需要!),在第二个返回false(你从头开始重新创建块),content_tag只返回字符串内容,这是你想要的. # ./action_view/helpers/javascript_helper.rb tag = content_tag(:script,javascript_cdata_section(content),html_options.merge(:type => Mime::JS)) if block_called_from_erb?(block) concat(tag) else tag end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |