我有一个部分 _dial_pad.html_erb ,它在同一个视图中多次通过Ajax调用加载,使用类似的东西:
$('#some_div').html("<%= escape_javascript(render(partial: 'dial_pad')) %>");
dial_pad部分包含:
<%= stylesheet_link_tag 'dial_pad' %>
<%= javascript_include_tag "dial_pad" %>
<center>
<div id="main-wrapper" >
<section role="main">
<div class="dialPad compact">
<div class="dials">
<ol>
<li class="digits one">
<p><strong>1</strong></p>
</li>
<li class="digits two">
<p><strong>2</strong></p>
</li>
</ol>
</div>
</div>
</section>
<br/>
</div>
</center>
dial_pad.js.coffee看起来像:
jQuery ->
$(document).keydown (e) ->
key = String.fromCharCode(e.keyCode)
if key=='1'
alert("1")
if key=='2'
alert("2")
现在当dial_pad部分加载时,dial_pad js也被加载了。所以我最后按了1作为例子,警报触发了两次。
如何确保dial_pad.js只加载一次而不是每当我为视图添加部分时?
答案 0 :(得分:1)
您可以在加载窗口属性时设置它,然后在绑定keydown之前检查该属性。
jQuery ->
unless window.dialPadIsLoaded
window.dialPadIsLoaded = yes
$(document).keydown (e) ->
key = String.fromCharCode(e.keyCode)
if key=='1'
alert("1")
if key=='2'
alert("2")