2014-11-05 15 views
3

我無法在hapi.js應用程序中獲取handlebars-layouts呈現。佈局呈現良好,但部分不呈現,只是有一個空白。如何獲取在node/hapi.js中工作的handlebar-layouts

我聲明瞭它這樣的:

var handlebars = require('handlebars'), 
    layouts = require('handlebars-layouts'); 
layouts(handlebars); 

server.views({ 
    engines: { 
    html: handlebars 
    }, 
    basePath: __dirname, 
    path: './views', 
    layoutPath: './views/layout', 
    partialsPath: './views/partials', 
    layout: true, 
    helpersPath: './views/helpers' 
}); 

和鍋爐板佈局

<html> 
    <body> 
    {{#content "body"}} 
     <h2>Welcome Home</h2> 
    {{/content}} 

    {{#content "foot"}} 

    {{/content}} 
</body> 
</html> 

和HTML部分

{{#extend "layout"}} 

    {{#content "body"}} 
     <h2>Sub page content</h2> 
    {{/content}} 

    {{#content "foot" mode="prepend"}} 
     <script src="assets/js/analytics.js"></script> 
    {{/content}} 
{{/extend}} 

回答

11

哈皮佈局支持開箱即用的。問題在於你試圖將hapi的佈局支持與handlebars-layouts模塊一起使用。這不會起作用。要麼使用內置的佈局支持,要麼使用handlebars-layouts。此外,在佈局中,您需要使用{{#block "body"}}{{/block}}而不是{{#content "body"}}。下面是兩個例子:

隨着車把的佈局模塊:

index.js:

var Handlebars = require('handlebars'); 
var HandlebarsLayouts = require('handlebars-layouts'); 
var Hapi = require('hapi'); 
var Path = require('path'); 

var engine = Handlebars.create(); 
HandlebarsLayouts.register(engine); 

var server = new Hapi.Server(); 
server.connection({ 
    host: '127.0.0.1', 
    port: 8000 
}); 

server.views({ 
    engines: { 
     html: engine 
    }, 
    path: Path.join(__dirname, 'views'), 
    partialsPath: Path.join(__dirname, 'views/partials)' 
}); 

server.route({ 
    method: 'GET', 
    path: '/item', 
    handler: function (request, reply) { 

     reply.view('item', { title: 'Item Title', body: 'Item Body' }); 
    } 
}); 

server.start(); 

視圖/分音/ page.html中:

{{#extend "layout"}} 

    {{#content "body"}} 
     <h2>{{title}}</h2> 
    {{/content}} 

    {{#content "foot" mode="prepend"}} 
     <script src="assets/js/analytics.js"></script> 
    {{/content}} 

{{/extend}} 

視圖/ partials/layout.html:

<html> 
    <body> 
    {{#block "body"}} 
     <h2>Welcome Home</h2> 
    {{/block}} 

    {{#block "foot"}} 

    {{/block}} 
</body> 
</html> 

的意見/ item.html:

{{#embed "page"}}{{/embed}} 

{{body}} 

隨着高致病性禽流感的內置佈局支持:

index.js:

var Handlebars = require('handlebars'); 
var Hapi = require('hapi'); 
var Path = require('path'); 

var server = new Hapi.Server(); 
server.connection({ 
    host: '127.0.0.1', 
    port: 8000 
}); 

server.views({ 
    engines: { 
     html: Handlebars.create() 
    }, 
    path: Path.join(__dirname, 'views'), 
    layoutPath: Path.join(__dirname, 'views/layout'), 
    layout: true, 
    partialsPath: Path.join(__dirname, 'views/partials') 
}); 

server.route({ 
    method: 'GET', 
    path: '/item', 
    handler: function (request, reply) { 

     reply.view('item', { title: 'Item Title', body: 'Item Body' }); 
    } 
}); 

server.start(); 

的意見/佈局/的layout.html:

<html> 
    <body> 
    {{> header}} 

    {{{content}}} 

    {{> footer}} 
</body> 
</html> 

查看/ partials/footer.html:

<script src="assets/js/analytics.js"></script> 

的意見/諧音/ header.html中:

<h2>{{@root.title}}{{^title}}Welcome Home{{/title}}</h2> 

的意見/ item.html:

{{body}} 
+0

以下爲例如 「隨着高致病性禽流感的內置佈局的支持:」 中, item.html呈現爲一個HTML轉義字符串,並且我看到所有的HTML都以瀏覽器中的文本形式出現。如何將item.html中的內容添加爲HTML?另外,我是否可以爲item.html文件添加多個內容區域來填寫:EG:{{css}},{{body}},{{js}}? – Zambonilli 2015-01-02 22:05:55

+0

@Zambonilli有人編輯我的答案。我把這些變化回到了我原來的答案。使用「{{{content}}}」而不是「{{content}}」。不確定多個內容區域。嘗試一下,如果它不起作用,那就把它作爲一個新問題。 – 2015-01-03 13:50:20

+0

這工作謝謝你!當我有機會時,我會嘗試測試多個內容區域。 – Zambonilli 2015-01-12 03:42:33

相關問題