2015-10-10 4 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 файл, но у меня нет малейшее представление о том, как заставить руль распознать его.

EDIT:

Рули входит в проект с помощью следующего кода в файле узла 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» и включить его в HTML-странице после того, как вы импортировали Рули JS файл.

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

Вы также можете проверить SWAG (https://github.com/elving/swag) Он содержит много полезных помощник руля.

+0

Рукоятки выполнены в указателе.js, а не в html-скрипте. Я пробовал этот подход в любом случае, и я все еще получаю ошибку –

0

Вам не нужно добавлять require('handlebars') только, чтобы получить помощник работы. Вы можете придерживаться express-handlebars. Определите помощников в таком конфигурационном объекте, как var myConfig = { helpers: {x: function() {return "x";}} }, и передайте его на объект 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}} 
Смежные вопросы