1

我正在使用把手 + hbs(按照块/扩展帮助程序示例)为我的节点应用程序呈现 html。出于某种原因,我的一个 div 被推到了 1 行。

我检查了chrome中的dom检查器,有一行带双引号:

讨厌双引号

这导致了这个:
讨厌的双引号结果

当我从 dom 检查器中删除双引号(按退格键或删除)时,布局是正确的:
在此处输入图像描述

在此处输入图像描述

到底是怎么回事?它是非打印字符还是什么?html/模板中没有任何内容,空格(或任何字符)不应该导致块级元素改变位置,对吧?

这是一些代码:
Layout.html 的相关部分

<div id="details" class="east">{{{block "east"}}}</div>

模板:

<div id="details-title">
  <h3 class="title elide" style="height:26px;">{{Title}}</h3>
</div>
<div id="details-body" class="content text">
  <img class="card" src="{{ImagePath}}" />
  <div>
    <span class="type">{{Type}}</span>
  </div>
  <div class="body">
    {{{Body}}}
  </div>
</div>

块 + 扩展助手:(来自 hbs 示例

hbs.registerHelper("extend", function (name, context) {
    var block = blocks[name];
    if (!block) {
        block = blocks[name] = [];
    }

    if (typeof context.fn !== "undefined") {
        block.push(context.fn(this));
    }
});

hbs.registerHelper("block", function (name) {
    var val = (blocks[name] || [])
        .filter(function () { return true })
        .join("\n");

    // clear the block
    blocks[name] = [];
    return val;
});

更新 显然,这是char 65279,我的预编译车把模板在渲染时都将其作为第一个字符发出。

4

2 回答 2

1

所以我添加了一个技巧来删除作为模板输出中第一个字符出现的 BOM:

var html = detailTemplate(res.data);
if (html.charCodeAt(0) === 65279) { // hack to fix precompiled hbs template bug
  html = html.substring(1);
}
$("#details").html(html);

事实证明,块 + 扩展助手与问题无关。我假设这是我使用的编码有问题,但我不知道如何改变它。上面的代码虽然解决了这个问题。

于 2013-01-06T20:45:44.693 回答
0

已解决,使用编码保存 > UTF-8

于 2015-07-30T09:32:12.117 回答