1

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

模板设置:

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

我要做的就是在加载第 3 级模板时加载特定的 javascript 文件,因此我的基本模板上没有大量填充的 head 标签,其中包含可能无法使用的 javascript 文件。

基本模板(在 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


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

你会如何处理这个问题?

4

2 回答 2

2

接下来是继承链中的下一个模板。不存在命名冲突。第二个模板做了一个包含,所以 next 为空(继承链中没有第三层)。因此,对象没有属性。

于 2013-07-31T14:47:50.600 回答
2

我的理解是 jQuery 评估从加载了 AJAX 的 HTML 片段中删除所有<script>标签,尽管目前我在 jQuery 文档中找不到证明:

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

然而,这是用 John Resig 自己的话来说的

当一个脚本节点被插入到文档中时,它也会被执行(通过 jQuery)。为了避免以后重新执行它(这种情况经常发生,事实证明),脚本只是从文档中删除。

自然,当您真正想要查看脚本元素的内容时(就像您所做的那样),这会导致一些问题。但是我认为在这种情况下权衡取舍更好。

我能想到的另一种解决方案是使用内部 .data() API 将信息附加到脚本元素,通知它以后不应再次执行。不过,我不确定这有多出乎意料。

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

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

于 2013-07-31T20:18:41.820 回答