【问题标题】:Chameleon templates for javascript files?javascript文件的变色龙模板?
【发布时间】:2012-06-24 17:42:18
【问题描述】:

我正在开发一个简单的金字塔应用程序,我在其中使用 JQuery 来执行 AJAX 请求。到目前为止,我的变色龙模板中有我的 javascript 代码。现在我想将我的 javascript 提取到另一个位置(例如作为静态资源)。

我的问题是我发现我的 javascript 代码依赖于动态生成的内容,如下所示:

$.post("${request.route_url('my_view')}",{'data': 'some data'}, function(html){
    $("#destination").html(html);
});

动态元素是:

"${request.route_url('my_view')}"

在模板中调用request对象的route_url方法。

是否有一种公认的模式可以将此类 javascript 文件分离到它们自己的模板中并为它们提供路由和视图,还是我只是将我的 javascript 保留在我的页面模板中?

【问题讨论】:

    标签: javascript python pyramid chameleon


    【解决方案1】:

    是的;您通常会将特定于上下文的信息(例如扩展路由)放入模板中,并从您的(静态)JavaScript 库中访问这些信息。

    包含上下文信息可以通过多种方式完成,具体取决于口味:

    1. 您可以在生成的 HTML 中的标签上使用数据属性:

      <body data-viewurl="http://www.example.com/route/to/view">
          ...
      </body>
      

      然后,您在静态 JS 代码中使用 jQuery .data() function 加载:

      var viewurl = $('body').data('viewurl');
      
    2. 使用虚构的LINK tag 关系在文档头部包含链接:

      <head>
          <link rel="ajax-datasource" id="viewurl"
                href="http://www.example.com/route/to/view" />
          ...
      </head>
      

      可以使用$('link#viewurl').attr('href')$('link[rel=ajax-datasource]').attr('href') 检索。这仅适用于 URL 信息。

    3. 直接在您的模板中生成 JS 变量,以便从您的静态代码中引用:

      <head>
          ...
          <script type="text/javascript">
             window.contextVariables = {
                 viewurl = "http://www.example.com/route/to/view",
                 ...
             };
          </script>
      </head>
      

      这些变量可以直接用contextVariables.viewurl引用。

    【讨论】:

    • 我选择了选项 2,因为它似乎最适合我的工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2011-10-01
    相关资源
    最近更新 更多