我基本上有一个3级模板。
我想从子模板动态加载脚本标签到主模板。

模板设置:


具有所有标题/脚本的基本页面
包含新脚本标签并加载小部件的第二级模板
包含小部件的第三级模板


我要做的就是在加载第3级模板时,加载特定的javascript文件,因此我的基本模板上没有一个可能无法使用的javascript文件,没有充实的head标签。

基本模板(在head标签中):

<script type="text/javascript" src="/assets/scripts/jquery-1.9.1.js"></script>
${next.javascriptIncludes()}
<script type="text/javascript" src="/assets/scripts/modules/baseModule.js"></script>



第二个模板(脚本标记在哪里)

##conditional to determine if the template should inherit from the base page
##it shouldn't inherit from the base page if it is being inserted into the page using ajax
<%!
def inherit(context):
    if context.get('isPage'):
        return "base_dashboard.mak"
    else:
        return None
%>
<%inherit file="${inherit(context)}"/>

<%def name="javascriptIncludes()">
    <script type="text/javascript" src="/assets/scripts/libs/jquery.maskedinput-1.3.1.min.js"></script>
</%def>

## AJAX load
%if isPage is False:
    blah blah blah shows up
    <script>s</script>
    <h1>H1 shows up</h1>
    <p style="color:red;">P tag shows up in red</p>
    <link rel="stylesheet" href="/assets/css/main.css" type="text/css"><- This shows up
    <div><script type="text/javascript" src="/assets/scripts/libs/jquery.maskedinput-1.3.1.min.js"></script></div>
    Script tag above is missing...
%endif

<div id="dashboard-profile-container">
<%include file="widgets/profile_widget.mak" />
</div>






第三个模板(小部件)

Just HTML




问题:基本模板的标题中未包含脚本标签

您将如何处理这个问题?

最佳答案

我的理解是,jQuery会评估并剥离AJAX加载的HTML片段中的所有<script>标记,尽管目前我无法在jQuery文档中找到证明:


  “ html”:以纯文本形式返回HTML;评估包含的脚本标签
  当插入DOM中时。


但是,这是in John Resig's own words


  将脚本节点插入文档时,也会执行
  (由jQuery)。为了避免以后重新执行(这种情况经常发生,
  事实证明)该脚本只是从文档中删除。
  
  自然,当您真正想要查看
  脚本元素的内容(如您所愿)。但是我认为
  在这种情况下,权衡会更好。
  
  我能想到的一种替代解决方案是使用
  内部.data()API,用于将信息附加到脚本元素,
  通知它以后不应再次执行。我不是
  当然,那是多么的意外。


因此,至少,jQuery在2009年曾经剥离<script>标签。

为了验证您可以使用Firebug等来确认您的应用程序确实返回了包含<script>标记的HTML blob-如果您确认这一点,那么它与Mako金字塔完全无关

10-05 20:24
查看更多