2

我有 div 显示来自 mysql 数据库的内容。内容太长,所以我决定使用 Handlebar 助手。这是我的html代码:

    <div class="row">
    {{#if news}}
        {{#each news}}

            <div class="col-md-4 img-portfolio">
                <a href="/news-details/{{id}}">
                    <img class="img-responsive img-hover small-img" src="/images/news/{{image}}" alt="">
                </a>
                <h3>
                    <a href="/news-details/{{id}}">{{title}}</a>
                </h3>
                <p> {{substr "10" text}} </p>
            </div>
            {{/each}}        
     {{else}}
     <p>No News</p>
{{/if}}

Handlebar Helper 放置在 index.js 文件中,如下所示:

Handlebars.registerHelper('substr', function(length, context, options) {
  if ( context.length > length ) {
       return context.substring(0, length) + "...";
  } else {
      return context;
   }
});

当我运行 nodejs 服务器时,我收到“Handlebar is not defined”错误。我安装了 express-handlebar 包,并在 index.js 文件中将其声明为

var Handlebar = require('express-handlebars');

但它仍然没有工作。

4

2 回答 2

2

您需要使用Handlebarsas 变量名而不是Handlebar.

此外, helpers的官方express-handlebarsexphbs.create文档建议在.

所以服务器上带有助手的代码应该是这样的:

var exphbs = require("express-handlebars"); // you can use any variable name

var hbs = exphbs.create({
  helpers: {
    substr: function(length, context, options) {
      if (context.length > length) {
        return context.substring(0, length) + "...";
      } else {
        return context;
      }
    }
  }
});
于 2016-10-15T17:08:34.577 回答
0

好吧,这不是一个“正确”的答案,但它使问题得到解决。我使用 CSS 使其工作。只是我为段落标签添加了一个 ID 作为“测试”,并在 style.css 文件中分配 css,如下所示:

#test {
-o-text-overflow: ellipsis;   /* Opera */
text-overflow:    ellipsis;   /* IE, Safari (WebKit) */
overflow:hidden;              /* don't show excess chars */
white-space:nowrap;           /* force single line */
width: 350px;                 /* fixed width */
}
于 2016-10-27T13:05:18.983 回答