繁体   English   中英

如何解决 找不到部分车头 车把

[英]How to Solve The partial head could not be found Handlebars

我运行 ExpressJS 并安装 Handlebars 作为模板引擎。 我正在使用 AdminLTE 并将其拆分为/views/layouts中的 6 个hbs文件。 我将 AdminLTE 模板放在public中。

views/layouts
   -- base.hbs // as defaultLayout
   -- footer.hbs
   -- head.hbs
   -- js.hbs
   -- nav.hbs
   -- sidebar.hbs

每次尝试访问 localhost:3000 时,我都会在节点控制台上收到以下错误

Error: The partial head could not be found

这是我的app.js设置:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var flash = require('express-flash');
var session = require('express-session');
var mongoose = require('mongoose');
var validator = require('express-validator');
var override = require('method-override');
var hbs = require('express-handlebars');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.engine('hbs', hbs({extname: 'hbs', defaultLayout: 'base', layoutDir: __dirname + '/views/layouts'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({secret: "1234"}));
app.use(flash());
app.use(validator());
app.use(override(function(req, res) {
  if (req.body && typeof req.body == 'object' && '_method' in req.body) {
    var method = req.body._method;
    delete req.body._method;
    return method;
  }
}));
[...]

这是我的base.hbs文件:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    {{> head}}
  </head>
  <body class="hold-transition skin-blue sidebar-mini">
    <div class="wrapper">
      {{> nav}}
      {{> sidebar}}

      <div class="content-wrapper">
        {{{ body }}}
      </div>

      {{> footer}}
      <div class="control-sidebar-bg"></div>

      {{> js}}

    </div>
  </body>
</html>

您需要在配置express-handlebars并将您的 partials 移动到该文件夹​​时注册到 partials 目录的路径。

app.engine('hbs', hbs({
    extname: 'hbs', 
    defaultLayout: 'base', 
    layoutsDir: path.join(__dirname, 'views/layouts'),
    partialsDir  : [
        //  path to your partials
        path.join(__dirname, 'views/partials'),
    ]
}));
[const hbs = require('hbs');

//this required before view engine setup
hbs.registerPartials(__dirname + '/views/partials');

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

] 1

在 app.js/index.js 中使用

hbs.registerPartials(__dirname + '/views/layouts');

在模板 hbs 文件中使用正确的语法示例: {{> header}}

我通过在 HTML DOM 中提供 id 解决了这个问题。 这部分我在 html 中遗漏了。

<div class="modal-footer" id="btn-group"></div>

这是我的 js 部分

var templateBtnGroup = Handlebars.getTemplate("btn-group", "btn-group.html");
Handlebars.registerPartial("btn-group", templateBtnGroup());
var templateBtnGroupScript = Handlebars.compile($('#handlebars-btn-group').html());
$("#btn-group").append(templateBtnGroupScript());

请检查文件夹名称大小写。 “公共”文件夹可能存在,您指的是小写的“公共”将不会呈现 css/images/client side js

您应该为 partials 创建一个子文件夹,然后使用 partialsDir 指向该文件夹:

app.engine('hbs', hbs({
   extname: 'hbs', 
   defaultLayout: 'base', 
   layoutDir: __dirname + '/views/layouts',
   partialsDir: path.join(__dirname, 'views/partials'),
}));

确保使用

extName到 viewEngine 中的extname object for partials

var options = {
    viewEngine: {
    extname: '.hbs',                      
    layoutsDir: 'views/layouts/',                      
    defaultLayout : 'template.hbs',                      
    partialsDir : 'views/partials/'                  
   },
   viewPath: 'views/emails/',
   extName: '.hbs'
};

目录

=> views/layouts/template.hbs
=> views/emails/forgot-password.hbs
=> views/partials/header.hbs
                 /footer.hbs

在模板.hbs

<html>
<body>
    <div class="container">
        {{>header}}
        {{{body}}}
        {{>footer}}
    </div>
</body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM