如何确保我在部分中只加载一次JS文件?

时间:2014-09-30 11:55:53

标签: javascript ruby-on-rails coffeescript partials

我有一个部分 _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只加载一次而不是每当我为视图添加部分时?

1 个答案:

答案 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")