2012-12-18 134 views
1

我正在使用handlebars + hbs(在块/扩展助手示例之后)为我的节点应用程序呈现html。出于某种原因,我的一个div被推下了1行。这是什么字符“”,它为什么会导致换行符?

我检查了镀铬的DOM查看器,并有一个与双引号的行:

hated double quotes

这将导致此:
hated double quotes result

当我从DOM查看器中删除双引号(按退格或删除)布局是否正确:
enter image description here

enter image description here

废话是怎么回事?这是一个非印刷角色或什么? html/template中没有任何内容,并且空格(或任何字符)不应导致块级元素更改位置,对吗?

下面是一些代码:
的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> 

块+延长助手:(from the hbs example

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,我预编译的句柄模板全都在渲染时作为第一个字符发出。

+0

模板是什么样的?你在喂什么数据?生成HTML的样子是什么?什么CSS有效? –

+0

你应该发布你的hbs,以便人们可以看到什么可能会产生额外的“” –

+0

@ muistooshort我想我的观点是,我已经排除了css,模板和数据。我试图弄清楚“”是什么字符,以及它为什么会导致换行符。问题的标题可能很糟糕。 –

回答

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); 

事实证明,该块+延长佣工无关的问题。我假设这是我使用的编码问题,但我不知道如何改变它。上面的代码虽然修复了这个问题。