【问题标题】:Koa-handlebars: Unable to render view: The partial could not be foundKoa-handlebars:无法渲染视图:找不到部分
【发布时间】:2015-03-27 19:57:47
【问题描述】:
// project/layouts/main.hbs

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    {{{@body}}}
</body>
</html>


// project/views/home-public.hbs

{{> nav-public}}
<div class="container">
    <div class="starter-template">
        <h1>Home Public</h1>
        <p class="lead">This is my home.</p>
    </div>
</div>


// project/partials/nav-public.hbs

<nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">Example</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <li class="active"><a href="/">Journey</a>
                </li>
                <li><a href="/">Departures</a>
                </li>
                <li><a href="about" style="margin-left:1em">About</a>
                </li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="/signout">Sign in</a>
                </li>
            </ul>
        </div>
    </div>
</nav>

运行的节点代码:

app.use(handlebars({
    defaultLayout: 'main'
}));

app.use(function* () {
    yield this.render('home-public', {
        user: {
            email: "name@example.com"
        }
    });
});

我看不出有什么问题。有什么想法吗?

【问题讨论】:

  • 您或其他人是否使用 hbs.registerPartials(__dirname + '/partials'); 之类的代码注册了部分?

标签: javascript node.js handlebars.js template-engine


【解决方案1】:

这个人一开始也让我失望了。原因是您在 {{&gt; partial-name}} 调用中使用了连字符和/或路径分隔符,当您来自 express-handlebars 时,这似乎是合理的。答案在文档中:

partialId(文件)

与布局和视图相比,此功能有点落后,但它需要一个部分模板文件的路径。 (相对于 partialsDir)并将其转换为对车把友好的标识符。

例如:“navigation.hbs”=>“导航”

默认情况下,它会去掉扩展名,并将剩余的字符串进行驼峰式处理。

例如:“nav/main.hbs”=>“navMain”

所以基本上,默认情况下,它会将您的部分路径完全转换为 camelCaseForHyphensAndDirectorySlashes,例如 example/my-partial 需要部分调用 {{&gt; exampleMyPartial }}

幸运的是,如果您更喜欢使用实际代表您的部分文件路径的部分名称,那么这很容易自定义。这是我使用的配置(我使用 strip-extension 模块来摆脱文件扩展名):

var stripExtension = require('strip-extension');
app.use(koaHandlebars({
  partialId: function(file) {
      // Note: the .replace below is just to normalise windows paths, you
      // may not need it.
      return stripExtension(file).replace('\\', '/');
  }
});

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2018-01-18
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多