我有一个名为“_comment.erb”的局部 View ,它可能会被父级多次调用(例如在循环中)。 '_comment.erb' 看起来像:
<script>
function aaa() {}
</script>
<%= comment.content %>
<%=link_to_function 'Do', 'aaa()' %>
你可以看到如果'_comment.erb'被多次调用,javascript函数'aaa'将被重新定义很多次。我希望它可以只定义一次,但我不想将它移动到父 View 。
我希望有一个方法,比如'run_once',我可以这样使用它:
<%= run_once do %>
<script>
function aaa() {}
</script>
<% end %>
<%= comment.content %>
<%=link_to_function 'Do', 'aaa()' %>
无论我调用'_comment.erb' 多少次,'run_once' 中的代码只会运行一次。我该怎么办?
最佳答案
这可能不是您问题的最佳解决方案,但创建一个只会产生一次的助手并不太麻烦:
助手
def output_once(name, &block)
@output_once_blocks ||= []
unless @output_once_blocks.include?(name)
@output_once_blocks << name
concat(capture(block), block.binding)
end
end
用法
<% output_once :define_aaa do %>
Your stuff here
<% end %>
关于ruby-on-rails - 如何在 View 中只运行一次代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3037997/