如何使用 Hogan.JS 从外部文件加载模板?

2023-11-23

I use Hogan.JS作为 JavaScript 模板库。它应该从外部文件加载 JavaScript 模板。人们或许可以在外部 JavaScript 文件中外包多个模板。

有谁知道这是怎么做到的吗?

我有以下代码示例:

<!DOCTYPE html>
<html>
  <head>
    <title>Hogan.JS Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script src="js/jquery-1.9.0.min.js"></script>
    <script src="js/hogan-2.0.0.min.js"></script>
    <script id="scriptTemplate" type="text/mustache">
      <p>Your text here: {{text}}</p>
    </script>
  </head>
  <body>
    <script>
      var data = {
        text: 'Hello World'
      };

      var template = $('#scriptTemplate').html();
      var compiledTemplate = Hogan.compile(template);
      var renderedTemplate = compiledTemplate.render(data);

      var box = document.createElement('div');
      box.innerHTML = renderedTemplate;
      document.body.insertBefore(box,document.body.childNodes[0]);
    </script>
  </body>
</html>

有了 ID,我就可以对模板进行寻址,但我总是需要一个单独的内联脚本。 :-(

这如何处理外部文件?


您有两种加载外部模板的选项:

  1. 预编译模板(恕我直言,Hogan.js 的最佳功能)或
  2. Using 需要.js's 文本插件加载模板字符串

不幸的是,预编译 Hogan.js 模板的文档不存在。如果您有一份副本Github 仓库然后在里面bin目录是一个名为的脚本hulk这样就可以了。这个需要nodejs连同一些npm模块(即nopt and mkdirp)已安装。

一旦你有nodejs并安装这些模块,给定模板文件 Test.hogan:

<p>Your text here: {{text}}</p>

您可以使用以下命令预编译脚本:

hulk Test.hogan

产生以下文本:

if (!!!templates) var templates = {};
templates["Test"] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<p>Your text here: ");t.b(t.v(t.f("text",c,p,0)));t.b("</p>");return t.fl(); },partials: {}, subs: {  }});

将其保存到一个名为templates.js

现在在您的 HTML 页面中,您将加载该内容templates.js文件并创建一个名为的全局对象templates其中编译的模板函数位于“Test”键中。您也可以省略hogan.js文件,因为那是编译器(并且您的模板现在已预编译)并且只需包含template.js发行版中的文件。

<!DOCTYPE html>
<html>
  <head>
    <title>Hogan.JS Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script src="js/template.js"></script>
    <script src="js/templates.js"></script>
  </head>
  <body>
    <script>
      var data = {
        text: 'Hello World'
      };

      var compiledTemplate = templates['Test'];
      var renderedTemplate = compiledTemplate.render(data);

      var box = document.createElement('div');
      box.innerHTML = renderedTemplate;
      document.body.insertBefore(box,document.body.childNodes[0]);
    </script>
  </body>
</html>

Note:我在使用当前版本时确实遇到了一些问题masterGithub 存储库的分支,因为它生成的模板使用的构造函数与 2.0.0 模板版本中使用的构造函数不同。如果你使用hulk请务必使用template.js文件位于lib folder.

或者,您可以使用 require.js 和文本插件。下载它们并将它们保存到您的js文件夹。然后你需要添加一个require加载模板文本的语句:

<!DOCTYPE html>
<html>
  <head>
    <script src="js/hogan-2.0.0.js"></script>
    <script src="js/require.js"></script>
  </head>
  <body>
    <script>
      var data = {
        text: 'Hello World'
      };

      require(['js/text!Test.hogan'], function(testHoganText) {
        // testHoganText contains the text of your template
        var compiled = Hogan.compile(testHoganText);
        var renderedTemplate = compiled.render(data);

        var box = document.createElement('div');
        box.innerHTML = renderedTemplate;
        document.body.insertBefore(box,document.body.childNodes[0]);
      });
    </script>
  </body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Hogan.JS 从外部文件加载模板? 的相关文章

随机推荐

  • clang-format 堆叠所有 if 语句参数(如果它们太长)

    我有一个if声明有几个or编辑的论点 为了便于阅读 我将它们垂直堆叠如下 if health flag a health flag b health flag c health flag d health flag e health fla
  • python-docx 中的运行级别内容是什么?

    我对 python docx 中 运行级别内容 的概念有点困惑 我知道如果我想检查段落是否为粗体 我需要检查 run bold 但到底是什么它 官方的定义是 run是与内联内容关联最密切的对象 在段落内的块项目边界之间流动的文本 图片和其他
  • 如何在发布模式下为 .net 托管项目生成 PDB?

    我知道 PDB 是为managed通过为编译器提供 debug 参数来在 NET 中进行项目 有没有办法在 VS 2005 GUI 中指定这一点 到目前为止 我可以让它在发布模式下生成 PDB 的唯一方法是手动修改 csproj 文件并添加
  • 具有多个“操作”的 HTML 表单

    我正在设置一个表单 其中我需要两个 操作 两个按钮 1 提交此表格以供批准 2 保存此应用程序供以后使用 如何创建支持多个 操作 的 HTML 表单 EG
  • Git克隆:远程端意外挂起,尝试更改postBuffer但仍然失败

    我正在尝试克隆存储库 第一次我到了82 然后半个小时没动 所以我取消了克隆并重新开始 此后 每次我尝试克隆它时 都会得到 6 10 之间的结果 然后失败并出现错误 远程端意外挂起 早期 EOF 我查找了错误并尝试了我能找到的所有解决方案 最
  • Python 扫描 WiFi

    我正在寻找一个可以扫描 WiFi 网络并打印所有 SSID 的程序 我尝试使用 scapy 但失败了 我正在使用 pyCharm 编辑器 我尝试了这段代码 from scapy all import from scapy layers do
  • Peterson 的算法能满足饥饿问题吗?

    我一直在搜索有关的信息彼得森算法但遇到的参考资料表明它不能解决饥饿问题 而只能解决僵局 这是真的 如果是这样 有人可以详细说明为什么不吗 彼得森算法 flag 0 0 flag 1 0 turn P0 flag 0 1 turn 1 whi
  • SVG 线性渐变 objectBoundingBox 与 userSpaceOnUse

    我正在制作两个渐变 一个以 objectBoundingBox 为单位 另一个以 userSpaceOnUse 为单位 这个想法是让它们看起来一样 但不知怎的 他们是不同的 这是 svg 文件
  • C# 中相当于 PHP 的“self::”的是什么?

    在 C 中 当我想从该类的另一个静态方法调用该类的静态方法时 是否有一个通用前缀我可以使用 PHP 等self 而不是类名 所以在下面的例子中 而不是说Customer DatabaseConnectionExists 我该怎么说Self
  • Java流操作在终点的执行顺序[重复]

    这个问题在这里已经有答案了 我一直试图从官方 Java 文档中找到关于 Java 流的明确约定 一旦调用终端操作 处理元素并调用中间操作 例如 让我们看一下这些同时使用 Java 流版本和普通迭代版本的示例 两者产生相同的结果 示例1 Li
  • 如何将Double参数与Play 2.0路由绑定

    我正在学习 Play 2 0 使用 Java API 并且想要一个 double float 参数 用于位置坐标 例如 我可以通过获取字符串形式的参数并在控制器等处解析它们来做到这一点 但是我可以在这里使用自动绑定吗 现在 我首先尝试简单地
  • 如何使用改造获得字符串形式的响应,而不使用 GSON 或 android 中的任何其他库[重复]

    这个问题在这里已经有答案了 我正在尝试从以下 Api 获取响应 https api github com users 用户名 但我不知道如何得到回应String这样我就可以使用String解析并得到JSONObject 使用的改造版本 改造
  • 如何在android中使用服务下载文件?

    我想通过服务从互联网下载文件 我找到了源代码并且代码运行得很好 但我有一个问题 当我从应用程序返回时 下载停止 或者当我清除 RAM 时 它也停止 所以我想找到下载代码 例如 Google Play 当清除 RAM 或应用程序历史记录时 它
  • Math.round(num) 与 num.toFixed(0) 和浏览器不一致

    考虑以下代码 for var i 0 i lt 3 i var num i 0 50 var output num Math round num num toFixed 0 alert output 在 Opera 9 63 中我得到 0
  • 适用于 Visual Studio 2012 更新 3 的 MySQL 连接器

    自从我安装了 Visual Studio 2012 的 mysql 连接器 6 7 4 和 Update 3 以来 MySQL 连接器就从连接管理器对话框中消失了 这是一个正在运行的项目 因此数据源配置是正确的 但是当我打开现有的 edmx
  • ASP.NET 页面上的多种语言(英语、法语)

    我只是想知道在网页上处理多种语言的最佳方法是什么 我应该在负载中创建一个事件 将所有控件的标签更改为适当的语言文本 还是有更好的方法 我正在使用 NET框架 谢谢 对于 ASP NET 请使用资源文件 这将使您能够提供多语言功能 并且可以添
  • 如何让脚本执行等待jquery加载

    我遇到一个问题 页面加载速度太快 jquery 在被后续脚本调用之前尚未完成加载 有没有办法检查jquery是否存在 如果不存在 请稍等片刻 然后重试 为了回应下面的答案 评论 我发布了一些标记 情况 asp net母版页和子页 在母版页中
  • 如何找到多项式的最佳次数?

    我是机器学习的新手 目前陷入了困境 首先 我使用线性回归来拟合训练集 但得到非常大的 RMSE 然后我尝试使用多项式回归来减少偏差 import numpy as np from sklearn linear model import Li
  • Angular:从 sessionStorage 恢复范围

    我试图在页面刷新时从 sessionStorage 检索搜索和过滤数据 sessionStorage restorestate 返回未定义 有人知道为什么吗 app run function rootScope rootScope on r
  • 如何使用 Hogan.JS 从外部文件加载模板?

    I use Hogan JS作为 JavaScript 模板库 它应该从外部文件加载 JavaScript 模板 人们或许可以在外部 JavaScript 文件中外包多个模板 有谁知道这是怎么做到的吗 我有以下代码示例