【问题标题】:How can I avoid loading JavaScript files in partial views?如何避免在部分视图中加载 JavaScript 文件?
【发布时间】:2016-12-11 14:45:22
【问题描述】:

在我的 Symfony 项目中,我在主页中加载了两个 JavaScript 文件:

datetimepicker 
autoComplete 

当我在主页加载局部视图时,无法从局部视图访问 JavaScript 文件。

如何避免多次加载相同的 JavaScript 文件?

我通过 Ajax 加载我的部分视图

//From my partial view 

$(selector).datetimepicker({
  //.....
});

$(selector).autocomplete({
  //.....
});

Error: $(...).datetimepicker is not a function
       $(...).autocomplete is not a function

【问题讨论】:

  • 当您说“无法从局部视图访问”时,您的意思是当您尝试从这些文件中访问变量时遇到“未定义变量”类型错误?
  • 是的,我知道 datetimepicker 不是一个函数。 autoComplete 不是一个函数。
  • 如何显示部分页面?
  • 你能发布你的基本模板代码吗?
  • 您应该尝试将您的 JS 代码,在您的基本模板上,放入 {% javascript %} 块中,在页面上您需要调用 JS,只需调用您的 JS 块,并使用 {{ parent() }} 函数,然后然后,你的 JS 代码。

标签: javascript php symfony


【解决方案1】:

我的猜测是,在您的基本树枝文件(默认为 base.html.twig)中,您在正文结束标记之前包含您的 js 文件

        {% block javascripts %}
            <script src=.... />
        {% endblock %}
    </body>
</html>

如果您的行为是正常的,您应该:

  • 在回显正文之前包含您的 JS 文件:

{% 块体 %}{% endblock %}

  • 最好的选择是将您的 JS 代码从您的部分移动到一个单独的 JS 文件中,您可以在依赖项之后包含该文件。

【讨论】:

    【解决方案2】:

    你就不能做类似的事情

    $.ajax({
        success: function(data){
            $(selector).datetimepicker({
               //.....
             });
    
             $(selector).autocomplete({
               //.....
             });
        }
    })
    

    我还可以帮助您将 js 代码包装在您加载到的部分视图中

    $(document).ready(function($) {
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2022-01-02
      • 2019-10-01
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多