控制javascript模块初始化(dropzone)

时间:2015-11-24 12:36:01

标签: javascript dropzone.js

我正在尝试手动实例化dropzone。为此,我首先需要设置:

Dropzone.autoDiscover = false;

问题在于我不知道该怎么做。要么我早做,Dropzone还没有定义,要么我太晚了,Dropzone已经附加到所有dropzone元素。

目前我正在尝试:

<body onload="myOnload()">    
    ...
    <script src="{% static 'bower_components/jquery/dist/jquery.min.js' %}"></script>
    <script src="{% static 'bower_components/dropzone/dist/dropzone.js' %}"></script>
    ...
    <script type="text/javascript">
     function myOnload() {
       Dropzone.autoDiscover = false;
       // create here my dropzones programatically
     }
    </script>
</body>

但这已经太晚了:dropzone已经加载并初始化了没有url的组件(因为我没有使用表单),并且失败了。

如何控制Dropzone何时开始初始化组件?

2 个答案:

答案 0 :(得分:1)

尝试在外面书写,然后手动添加您需要的内容

<script type="text/javascript">
 Dropzone.autoDiscover = false;
 function myOnload() {
   // create here my dropzones programatically
 }
</script>

此脚本标记应在插件包含之前编写:

<script type="text/javascript">
 Dropzone.autoDiscover = false;
 function myOnload() {
   // create here my dropzones programatically
 }
</script>
<script src="{% static 'bower_components/jquery/dist/jquery.min.js' %}"></script>
<script src="{% static 'bower_components/dropzone/dist/dropzone.js' %}"></script>

答案 1 :(得分:1)

正如我在其他问题评论中所解释的那样,我不是关于如何加载页面的专家,但我将尝试解释该过程,或者至少我认为该过程是如何工作的。

在触发DOMContentLoaded事件之前,dropzone库不会尝试附加到元素,这与身体标记的onload属性相同但不完全相同,我不完全确定,但我认为onload在触发前等待更多的东西。

所以我认为它发生的是首先触发DOMContentLoaded并且Dropzone自动附加到.dropzone元素。稍后会触发onload事件并调用myOnload()函数,因为dropzone已经附加了,所以迟到了。

要解决此问题,您必须包含在库之后设置Dropzone.autoDiscover = false但没有换行的脚本。

<script src="{% static 'bower_components/jquery/dist/jquery.min.js' %}"></script>
<script src="{% static 'bower_components/dropzone/dist/dropzone.js' %}"></script>

<script type="text/javascript">
 Dropzone.autoDiscover = false;
 function myOnload() {
   // create here my dropzones programatically
 }
</script>