Kva*_*ass 1 javascript ruby jquery embedded-ruby ruby-on-rails-3
我在下面的代码中有以下代码:
<script type="text/javascript">
$(document).ready(function(){
$("#button").click(function(event){
if(false) { //even with if (false), this code is still being executed!
<% if obj %>
<% my_method(obj) %>
<% end %>
$("#button").attr("href","/" + obj.my_path);
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
正如您在注释中看到的那样,JavaScript if语句的条件为false,因此永远不应执行该块.但由于某种原因,它就像我的JS不存在而且正在调用ERB块.为什么会这样?JS似乎在网站上的其他页面上正常工作.
如果您需要有关此问题的更多信息以帮助解决问题,请尽量提供尽可能多的信息.
您似乎对服务器端代码和客户端代码之间的区别感到有些困惑.
ERB在服务器上执行,客户端上的JavaScript.当你的ERB被执行时,Ruby几乎看到了这个:
puts '<script type="text/javascript">'
puts ' $(document).ready(function(){'
puts ' $("#button").click(function(event){'
puts ' if(false) {'
if obj
my_method(obj)
end
puts ' $("#button").attr("href","/" + obj.my_path);'
puts ' }'
puts ' });'
puts ' });'
puts '</script>'
Run Code Online (Sandbox Code Playgroud)
再简化一点,ERB归结为这样的事情:
puts some_strings[0]
puts some_strings[1]
puts some_strings[2]
puts some_strings[3]
if obj
my_method(obj)
end
puts some_strings[4]
puts some_strings[5]
puts some_strings[6]
puts some_strings[7]
puts some_strings[8]
Run Code Online (Sandbox Code Playgroud)
当您打开ERB时,为什么my_method(obj)
要执行它变得非常明显.
在ERB中,你所有的JavaScript都只是一堆未经解释的字符串:你的JavaScript只是一堆无意义的文本,直到它到达客户端浏览器.
然后,浏览器将看到如下内容:
<script type="text/javascript">
$(document).ready(function(){
$("#button").click(function(event){
if(false) {
$("#button").attr("href","/" + obj.my_path);
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
您的ERB无处可见,因为它是在服务器上处理的.但是,你if(false)
被看到了,它将由客户解释.但是,您的ERB已经运行,因此if(false)
不会影响您的my_method(obj)
Ruby调用.
归档时间: |
|
查看次数: |
389 次 |
最近记录: |