【问题标题】:Interchangability of PHP and JavaScript templates (prevent duplication)PHP 和 JavaScript 模板的互换性(防止重复)
【发布时间】:2011-10-30 13:38:05
【问题描述】:

我使用 MVC PHP 框架来保持我的 Web 应用程序尽可能干燥。我所有的 HTML 模板都整齐地隐藏在我项目应用程序范围内的一个文件夹中。

问题在于,每当我使用 JSON 字符串通过 AJAX 构建页面时,我都需要重用这些模板中的很多行并将它们复制到我的 JavaScript 文件中的某个位置。这意味着我的 JavaScript 文件中的模板和我的 PHP 应用程序中的模板之间存在代码重复。

我想知道如何防止这种重复。一种方法当然是使用 AJAX 加载模板,但是我最终会收到一个页面的双重 AJAX 请求。此外,PHP 模板使用与 MooTools 不同的标记样式来表示变量,但 HTML 设置是相同的。

总结一下:是否有任何巧妙的方法或工具来防止模板重复,以便一个文件可以在 PHP 和 JavaScript 中使用?作为记录:我使用 MooTools 框架来构建我的 JavaScript 文件。

编辑

经过一番研究,我找到了我认为最好的答案。有兴趣的朋友:

PURE 将 HTML 表示和 JavaScript 逻辑完全分开,因此您不必费心在脚本中包含 HTML 元素。模板可以简单地在 HTML 文件本身中提供。

例子:

// JSON string
{ 'who': 'me' }

// In your rendered HTML page:
<div id="who"></div>

// After the JSON string is sent back
<div id="who">me</div>

此外,它可以被多种库使用:MooTools、jQuery、dojo、Prototype 等。

【问题讨论】:

  • 你知道 mootools 支持string.substitute(obj),其中字符串将包含对对象属性的引用,例如。 "&lt;div&gt;{name}&lt;/div&gt;".substitute(userobj) 在字符串中返回 userobj.name 的值,这可以提供良好的模式重用。另外,看看mooml插件
  • 我知道,但是替换不允许简单的if 或重复操作,并且使用 mooml 您仍然必须在 JavaScript 中提供模板,而是在对象中提供。

标签: php javascript json model-view-controller mootools


【解决方案1】:

您可能正在寻找一种可用于多种语言的模板语言,以便您可以跨语言重复使用您的模板。

这样的模板语言之一是{{mustache}},适用于PHPJavascript 以及更多语言。

【讨论】:

  • 我已经在使用 mustache,但问题仍然存在,我必须使用额外的 AJAX 请求来获取模板。
  • 您可以将模板包含在可缓存 js 文件中的变量中
【解决方案2】:

有趣的问题,我有时也很纠结。

  • 您可以将 html 放入您的 javascript 代码中,这是重复的,您希望避免这种情况

  • 您可以使用单独的 ajax 调用加载 html,这会导致运行更多 ajax 调用,并可能降低您的应用程序的速度。你可能想避免它。

  • 您可以在将加载数据的 Ajax 调用中传递您的 html。这样,你只有一个电话。让您的 PHP 打开您的模板,并将它们添加到 data-json 流中。

  • 你可以把模板放在你原来的html里面,把它隐藏起来。

如果模板小且有限,我会选择解决方案 3,或者可能是 4。

JSon 将类似于 {"data": ... your original data object, "templates":{...}}

【讨论】:

  • 感谢您的回答。我对选项 3 的问题是,最好使用 HTML 作为来自 AJAX 请求的响应字符串,而不是 JSON。我想防止这种情况发生。在这种情况下,选项 4 似乎是最好的。
猜你喜欢
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 2021-09-16
  • 2011-04-12
  • 1970-01-01
  • 2013-09-02
相关资源
最近更新 更多