Koa-handlebars:无法渲染视图:无法find部分

// 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" } }); }); 

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

这个也是第一次把我抓出来的。 原因是你在你的{{> partial-name}}调用中使用了连字符和/或path分隔符,当你来自快速句柄时这似乎是合理的。 答案在文档中:

partialId(文件)

与布局和视图相比,这个函数稍微向后一点,但它需要一个部分模板文件的path。 (相对于partialsDir)并将其转换为一个友好的手柄标识符。

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

默认情况下,它将剥离扩展名,骆驼事件的剩余string。

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

所以基本上,默认情况下它会将你的部分path完全转换成camelCaseForHyphensAndDirectorySlashes, example/my-partial将需要部分调用{{> exampleMyPartial }}

幸运的是,如果您更喜欢使用实际上代表您的部分文件path的部分名称,则很容易进行自定义。 这里是我使用的configuration(我使用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('\\', '/'); } });