【发布时间】:2013-02-26 15:30:01
【问题描述】:
我们在 Web 应用程序中使用车把预编译模板。我们的一个元素最近损坏了 - 在某个位置使用了不正确的 HTML。查看预编译的 js 时,我可以看到缺少元素。预编译的 HTML 非常庞大且复杂,包含许多把手操作符。这是一个非常简化的版本:
{{#if isGeneric}}
<!-- SEARCH FOR ME-->
<td class="empty"> </td>
<td class="empty"> </td>
<!-- THE END FOR ME-->
{{else}}
<td class="description"><p id="{{productId}}" isGeneric="{{isGeneric}}" productType="{{productType}}" class="bluetext productid_opener">{{description}}</p>
<td class="something">{{productName}}</td>
{{/if}}
HTML 中的这个 sn-p 与另一个 sn-p 非常相似(如果这有什么不同的话)。
当我预编译它并在生成的programXX 中搜索 HTML 时,我在任何地方都找不到代码(例如“搜索我”)。我注意到在该特定代码部分之前和之后的车把程序都有一个间隙编号。例如:
function program52(depth0,data) { // find elements in the condition just prior to the "if" above }
function program54(depth0,data) { // find elements from HTML in condition just after the "if" above }
因此我假设函数program53 包含相关代码,但为什么它不包含在生成的HTML 中?把手如何确定 HTML 中包含或排除的内容?
【问题讨论】:
-
你能自己编译有问题的模板吗?您是否尝试过在浏览器中通过简单的
Handlebars.compile调用手动编译它? -
浏览器内编译工作。在客户端检索和编译模板并正确呈现,但行为不一致 - 没有对代码库进行任何更改,预编译模板从使用正确的 sn-p 变为不正确的,然后再次开始工作,并且查看我们的源代码历史,代码库中没有任何变化。我们正在通过 nodejs 脚本运行预编译,我能想到的唯一合乎逻辑的原因是主机上的预编译速度 + 异步 nodejs 性质。