2015-10-10 66 views
3

我正在使用handlebars.js模板和節點進行快速交流。我正在編制一個使用{{@index}}模板標籤的編號列表,但是由於索引從0開始,我想從一開始,似乎我需要使用自定義幫助程序。我見過很多關於這個職位和我發現下面的代碼:錯誤:在Handlebars.js中缺少幫手

Handlebars.registerHelper("inc", function(value, options) 
{ 
    return parseInt(value) + 1; 
}); 

{{#each score}} 
     <li class="list-group-item"> 
     <div id="place"> {{inc @index}} &nbsp </div> 
     <div class="wordOrName">{{ player_name }}</div> 
      <div class="number">{{ score }}</div></li> 
     {{/each}} 

似乎我無法找到是哪裏輔助寄存器功能應該去。我試圖把它裏面的模板本身和其他各種地方,但我仍然不斷收到

Error: Missing helper: "inc" 
    at model.<anonymous> 

理想我想有一個單獨的文件helpers.js助手,但我沒有關於如何讓把手識別它的一點想法。

編輯:

把手包括在與節點文件index.js中下面的代碼項目:

// view engine 
app.set('views', __dirname + '/views/'); 
app.set('view engine', 'handlebars'); 
app.engine('handlebars', engines.handlebars); 

這似乎是不可能的,包括模板本身的輔助函數。

回答

5

我想通了......傭工確實需要在節點的應用程序文件進行註冊,像這樣:

// view engine 
app.set('views', __dirname + '/views/'); 
app.set('view engine', 'handlebars'); 
var hbs = require('handlebars'); 
hbs.registerHelper("inc", function(value, options) 
{ 
    return parseInt(value) + 1; 
}); 
app.engine('handlebars', engines.handlebars); 

我希望這個信息更方便,但也有它。

0

您可以將助手粘貼到單獨的文件中,就像您說的「helper.js」一樣,並在導入Handlebars JS文件後將其包含在HTML頁面中。

<script src="handlebars.min.js"></script> 
<script src="helper.js"></script> 

您還可以檢查出贓物(https://github.com/elving/swag)它包含了很多有用的車把傭工。

+0

把手在索引中執行。js文件,而不是在html腳本中。無論如何,我嘗試了這種方法,但仍然出現錯誤 –

0

你不需要添加require('handlebars')只是爲了讓幫手工作。你可以堅持表達句柄。在像config這樣的配置對象中定義幫助器,並將它傳遞到如下所示的express-handlebars對象:require('express-handlebars').create({myConfig})

下面是一個完整的示例,其中包含一些輔助函數和一些配置的視圖目錄。

var express = require('express'); 
var exphbs = require('express-handlebars'); 
var app = express(); 
var hbs = exphbs.create({ 
    helpers: { 
     test: function() { return "Lorem ipsum" }, 
     json: function (value, options) { 
      return JSON.stringify(value); 
     } 
    }, 
    defaultLayout: 'main', 
    partialsDir: ['views/partials/'] 
}); 
app.engine('handlebars', hbs.engine); 
app.set('view engine', 'handlebars'); 
app.set('views', path.join(__dirname, 'views')); 

我的理解是,將對象從require('express-handlebars');返回並不是一個「真正」的車把對象。所以你不能依賴一些函數,而是你必須通過一個配置對象來傳遞像幫助器這樣的東西到.create()函數

-3

我的一個朋友也提出了這個建議,它的工作原理!

<h2>Success!</h2> 
{{#each data}} 
<div> 
    Name: {{ LocalizedName }}<br> 
    Rank: {{ Rank }}<br> 
</div> 
{{/each}} 
2

註冊數學句柄並執行所有數學運算。

app.engine('handlebars', exphbs({ 
    helpers:{ 
    // Function to do basic mathematical operation in handlebar 
    math: function(lvalue, operator, rvalue) {lvalue = parseFloat(lvalue); 
     rvalue = parseFloat(rvalue); 
     return { 
      "+": lvalue + rvalue, 
      "-": lvalue - rvalue, 
      "*": lvalue * rvalue, 
      "/": lvalue/rvalue, 
      "%": lvalue % rvalue 
     }[operator]; 
    } 
}})); 
app.set('view engine', 'handlebars'); 

然後您可以直接在您的視圖中執行操作。

{{#each myArray}} 
     <span>{{math @index "+" 1}}</span> 
    {{/each}}