【问题标题】:Templates or similar for JavaScript programs in the browser浏览器中 JavaScript 程序的模板或类似内容
【发布时间】:2009-11-18 17:05:37
【问题描述】:

我已经完成了很多服务器端 HTML 编程,并使用了许多不同的模板语言来生成 (X)HTML。这部分我很清楚。

但我想知道的是人们如何在客户端 JavaScript 程序中使用它?我的意思是,显然可以在浏览器中为 JavaScript 编写模板语言 - 但人们通常是这样做的吗?还是人们只是直接操作 DOM?还是有一些大多数人使用的不错的帮助库?

举个例子 - 假设我想要一个 JavaScript 应用程序,它从远程服务器获取联系人卡片列表,并以 JSON 对象的形式返回。然后,我想使用某些预定义的 HTML 标记在浏览器端显示此联系人卡片,并填写必填字段。这通常是怎么做的?

【问题讨论】:

标签: javascript html templates


【解决方案1】:

人们通常可以通过多种方式做到这一点:

  • 当您进行 ajax 调用并将其插入 DOM 时,将 html 存储在从服务器获取的文件中
  • 获取您想要的动态内容位,然后在客户端将所有 HTML 重新组合并插入到 DOM 中(这可能是最常见的,也是我最不推荐的一种)
    • 使用 javascript 模板语言(我比较偏爱 jquery 的 tempest 插件)

还有其他解决方案,例如隐藏要在文本区域或 html 脚本标签中编写的内容,但我不喜欢它们,因为它们往往会产生不正确/无效的标记。

【讨论】:

  • 嘿,我写了暴风雨!不错,谢谢夸奖!
【解决方案2】:

您描述的任务可以通过模板系统或手动 DOM 操作来完成,就像在服务器端执行此操作可以通过模板系统或一系列字符串连接来完成一样。就个人而言,如果我不得不问这个问题,我通常会使用模板系统。 (事实上​​,如果您将大多数语言中可用的 printf 样式格式视为模板系统,那么我几乎不会在不使用模板的情况下操作字符串。)

我知道的几种 JavaScript 模板语言包括:

Closure 模板的有趣之处在于它们也有一个服务器端渲染器可用,因此您可以在服务器端代码和 JavaScript 之间共享模板。 jugl 与 TAL 非常相似,因此您也可以使用 jugl 来做到这一点。

【讨论】:

    【解决方案3】:

    我查看了这里提出的解决方案,但并不完全满意。我学到的是:

    • 大多数人只是将字符串拼凑起来并分配给elem.innerHTML。这对我来说太丑了。
    • 有些人用Builder 对象构建DOM,所以实际上他们是用JavaScript 为动态内容编写HTML。如果内容是 100% 动态的,这就是我会使用的,但在这种情况下,我宁愿拥有可以自定义的实际上是 html 的模板。
    • 有些人在客户端 JavaScript 上使用实际的模板语言。也就是说,有各种各样的 if-constructs 和 while-constructs 以及字符串替换等等。这将是我在写问题时所寻找的。只是,当您拥有整个 DOM 引擎时,解析 文本 标记客户端似乎完全没有效率。

    但是,我发现自己真正想要的是一种编程方式,将来自 DOM sn-ps 的 HTML 拼凑在一起,并在中间填充所需的数据。我为此找到了两种解决方案:

    其中,我根据自己的需要选择了 PURE。

    谢谢大家的回答。

    【讨论】:

      【解决方案4】:

      你是对的。有 JavaScript 的模板库。如果足够简单,可以将 HTML 创建为字符串并添加到 DOM,此时浏览器将显示它。

      这是 John Resig 的微模板库:http://ejohn.org/blog/javascript-micro-templating/

      【讨论】:

      【解决方案5】:

      我建议使用 ExtJS XTemplates。简单,强大,独立,不错。 -j

      【讨论】:

        【解决方案6】:

        如果您使用Script#,您可能需要考虑SharpTemplate,这是一个强类型、超高效的HTML 模板引擎。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-23
          相关资源
          最近更新 更多